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で正しく返しますか? lapply
、rbind
がここに近づくでしょうか? 動作を理解しようとしています。
落札として ''適用されます(一部、2、FUN)を使用しないでください。また、あなたの関数の誤差が、これは...ありすべてが行列で、日付を強制的に数値に戻します。代わりに 'lapply(サブセット、FUN)'を試してください。 – thelatemail
ありがとう@thelatemail - 私の質問の最も重要な部分は、動作についての答えです。 – gscott