Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将strtime函数应用于data.table的每个成员_R_Datetime_Data.table_Apply - Fatal编程技术网

将strtime函数应用于data.table的每个成员

将strtime函数应用于data.table的每个成员,r,datetime,data.table,apply,R,Datetime,Data.table,Apply,我无法将函数应用于data.table的每个成员。以下是一个简化的示例: dt <- data.table( a= c("30JAN14:23:16:00","23MAY12:02:00:00"), b=c("03AUG09:00:00:00","13JUN12:02:00:00"), c=c("31JAN14:15:19:00","23MAY12:00:00:00")) strptime(dt[1,1,with

我无法将函数应用于data.table的每个成员。以下是一个简化的示例:

dt <- data.table( a= c("30JAN14:23:16:00","23MAY12:02:00:00"), 
                  b=c("03AUG09:00:00:00","13JUN12:02:00:00"), 
                  c=c("31JAN14:15:19:00","23MAY12:00:00:00"))

strptime(dt[1,1,with=FALSE], "%d%B%y:%H:%M:%S")

您还可以使用
as.IDate
as.ITime
代替
strtime
。此外,
lappy
更好:

dt[, (cols):=lapply(.SD, function(x) paste(as.IDate(x, "%d%B%y:%H:%M:%S"),
                                           as.ITime(x, "%d%B%y:%H:%M:%S"),
                                           sep=" ")),
   .SDcols=cols]
这使得:

> dt
                     a                   b                   c
1: 2014-01-30 23:16:00 2009-08-03 00:00:00 2014-01-31 15:19:00
2: 2012-05-23 02:00:00 2012-06-13 02:00:00 2012-05-23 00:00:00

strtime
返回类POSIXlt,它实际上是一个列表,解释了为什么在data.table或data.frame对象中使用它会产生问题:

> dt[, (cols):=lapply(.SD, function(x) as.POSIXct(strptime(x, "%d%B%y:%H:%M:%S"))),.SDcols=cols]
> dt
                     a                   b                   c
1: 2014-01-30 23:16:00 2009-08-03 00:00:00 2014-01-31 15:19:00
2: 2012-05-23 02:00:00 2012-06-13 02:00:00 2012-05-23 00:00:00

您的问题不在于data.table语法,而在于要应用的函数的选择。这是更好的答案,它返回类
“POSIXct”
的列,而我的返回字符列congrats以达到10k!
> dt[, (cols):=lapply(.SD, function(x) as.POSIXct(strptime(x, "%d%B%y:%H:%M:%S"))),.SDcols=cols]
> dt
                     a                   b                   c
1: 2014-01-30 23:16:00 2009-08-03 00:00:00 2014-01-31 15:19:00
2: 2012-05-23 02:00:00 2012-06-13 02:00:00 2012-05-23 00:00:00