1
也许我在过度工程这个,但我建立一个功能,根据列输入数自动解析日期列。解析日期时间适用,返回数字而不是日期对象
数据:
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)
}
}
所以,问题是,当我使用一列(如df[,1]
或df[,c(CreatedDate)
]),函数正确返回:
[1] "2015-11-20" "2015-11-21" "2015-11-21" "2015-11-21"
[5] "2015-11-21"
但是,当我使用超过一列(例如,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
为什么单个向量在格式中正确地返回日期值,而apply却没有?在这里lapply
,rbind
会更好吗? 只是试图了解行为。
不要使用'申请(子集2,FUN)'因为它使一切都是一个矩阵,它将你的日期强制转换回数字。改用'lapply(subset,FUN)'。 – thelatemail
感谢@thelatemail - 这回答了我关于行为问题最重要的部分。 – gscott