dt <- data.table(strdate = c("20140101", "20140103"))
dt[, date := strptime(strdate, "%Y%m%d")]
Warning message:
In `[.data.table`(dt, , `:=`(date, strptime(strdate, "%Y%m%d"))) :
Supplied 11 items to be assigned to 2 items of column 'date' (9 unused)
dt
strdate date
1: 20140101 0,0
2: 20140103 0,0
1.9.6尝试将POSIXlt日期分配给列时抛出错误
例如:
df <- as.data.frame(dt)
df$date <- strptime(df$strdate, "%Y%m%d")
df
strdate date
1 20140101 2014-01-01
2 20140103 2014-01-03
但是,数据框工作
data.table
是否有.rsd
的内容使其无法处理此数据类型?
答案 0 :(得分:3)
使用POSIXct
,除其他外,您可以随时随地免费获得。
R> dt <- data.table(strdate = c("20140101", "20140103"))
R> dt
strdate
1: 20140101
2: 20140103
R> library(anytime)
R> dt[, date := anytime(strdate)] # creates POSIXct, use anydate() for Date
R> dt
strdate date
1: 20140101 2014-01-01
2: 20140103 2014-01-03
R>
该列现在包含正确的日期(时间)表示,您仍然可以在其上进行计算:
R> dt[, newdate := as.IDate(date) + 7]
R> dt
strdate date newdate
1: 20140101 2014-01-01 2014-01-08
2: 20140103 2014-01-03 2014-01-10
R>
或者,如果您想要日期,只需使用Date
类型,例如通过anydate()
:
R> dt <- data.table(strdate = c("20140101", "20140103"))
R> dt[, date := anydate(strdate)]
R> dt[, newdate := date + 7]
R> dt
strdate date newdate
1: 20140101 2014-01-01 2014-01-08
2: 20140103 2014-01-03 2014-01-10
R>
答案 1 :(得分:1)
以下是使用lubridate
的解决方法:
dt$date <- as.POSIXct(lubridate::ymd(strptime(dt$strdate, "%Y%m%d")))
strdate date 1: 20140101 2014-01-01 2: 20140103 2014-01-03
另请参阅this post有关我们使用POSIXct而不是POSIXlt与data.table
的原因。