2017-08-10 11 views
1

私はこれをエンジニアリングしていないかもしれませんが、入力する列の数に応じて自動的に日付列を解析する関数を構築しています。Dateオブジェクトの代わりに数値を返す

データ:

CreatedDate    LastModifiedDate 
2015-11-20T19:46:11.000Z 2015-11-20T19:46:11.000Z 
2015-11-21T02:54:54.000Z 2015-12-01T18:48:07.000Z 
2015-11-21T14:36:32.000Z 2015-11-21T14:36:32.000Z 
2015-11-21T16:03:41.000Z 2015-11-21T16:03:41.000Z 
2015-11-21T17:31:43.000Z 2015-11-21T17:55:13.000Z 




require(lubridate) 
require(magrittr 

parse_sf_hms <- function(subset) { 
    if(is.null(ncol(subset))){ 
    subset %>% ymd_hms(tz="America/New_York",quiet=TRUE) %>% as.Date(format="%m/%d/%Y") -> x 
    return(x) 
    } else { 
    apply(subset, 2, function(x) x %>% ymd_hms(tz="America/New_York",quiet=TRUE) %>% as.Date(format="%m/%d/%Y")) 
    return(x) 
    } 
} 

だから、問題は、私は1つの列(例:df[,1]またはdf[,c(CreatedDate)])を使用する場合、関数が正しく返すことです:

[1] "2015-11-20" "2015-11-21" "2015-11-21" "2015-11-21" 
[5] "2015-11-21" 

をしかし、私はより多くを使用する場合1つの列(例:df[,c(1,2)]またはdf[,c('CreatedDate','LastModifiedDate')])。代わりに、私は次のようになります。

 CreatedDate LastModifiedDate 
[1,]  16759   16759 
[2,]  16760   16770 
[3,]  16760   16760 
[4,]  16760   16760 
[5,]  16760   16760 

なぜ、適用されていない単一のベクトルは日付の値をformatで正しく返しますか? lapplyrbindがここに近づくでしょうか? 動作を理解しようとしています。

+5

落札として ''適用されます(一部、2、FUN)を使用しないでください。また、あなたの関数の誤差が、これは...ありすべてが行列で、日付を強制的に数値に戻します。代わりに 'lapply(サブセット、FUN)'を試してください。 – thelatemail

+0

ありがとう@thelatemail - 私の質問の最も重要な部分は、動作についての答えです。 – gscott

答えて

3

これを試してみてください:

parse_sf_hms <- function(subset) { 
    if(is.null(ncol(subset))){ 
    subset %>% ymd_hms(tz="America/New_York",quiet=TRUE) %>% as.Date(format="%m/%d/%Y") -> x 
    return(x) 
    } else { 
    x <- lapply(subset, function(x) x %>% ymd_hms(tz="America/New_York",quiet=TRUE) %>% as.Date(format="%m/%d/%Y")) 
    return(x) 
    } 
} 

thelatemailが言ったように、lapply使用。 xに割り当てる

apply(subset, 2, function(x) x %>% ymd_hms(tz="America/New_York",quiet=TRUE) %>% as.Date(format="%m/%d/%Y")) 

ニーズ:

x <- lapply(subset, function(x) x %>% ymd_hms(tz="America/New_York",quiet=TRUE) %>% as.Date(format="%m/%d/%Y")) 
関連する問題