【发布时间】:2016-09-02 16:00:06
【问题描述】:
我有一个带有日期列的 data.table。我需要创建一个新列,根据原始日期是在某个日期之前还是之后添加 1 年或 2 年。
library(data.table); library(lubridate)
name = c("A", "B", "C")
paid = c("5/30/2016", "6/30/2016", "7/30/2016")
data = data.table(name,paid)
new_release = mdy("6/1/2017")
data[, paid := mdy(paid)]
data[, change_date:= ifelse(paid + years(1) < new_release,
paid + years(2), paid +years(1)) ]
我得到下面的结果。 lubridate 无法将其转换为日期。我试过用mdy 包装ifelse 语句,但这也不起作用。我知道条件语句正在工作,因为如果您用TRUE/FALSE 替换分配,它会正确分配值。
> data
name paid change_date
1: A 2016-05-30 1527638400
2: B 2016-06-30 1498780800
3: C 2016-07-30 1501372800
> str(data)
Classes ‘data.table’ and 'data.frame': 3 obs. of 3 variables:
$ name : chr "A" "B" "C"
$ paid : POSIXct, format: "2016-05-30" "2016-06-30" "2016-07-30"
$ change_date: num 1.53e+09 1.50e+09 1.50e+09
- attr(*, ".internal.selfref")=<externalptr>
【问题讨论】:
标签: r data.table conditional lubridate