【发布时间】:2017-04-10 14:47:05
【问题描述】:
我正在尝试在我的 data.table 中创建一个新列。我有两列,一列有开始日期,另一列有结束日期。开始日期始终为 2016-02-28。结束日期在某些情况下是 2014-12-31,在其他情况下是 2020-12-31(均采用 YYYY-MM-DD 格式)。
在第一种情况下,很明显我应该得到一个负的日期差异。在第二种情况下,它是积极的。
我想使用带有 ifelse 语句的 sapply 函数来确定日期的差异。任何时候,差异都是负数,我希望 R 将其替换为值 1。
我这样做如下。
sapply(df$end.date, function(x) { ifelse(df$end.date>start_date, as.integer(length(seq(from=start_date, to=as.POSIXct(x,format="%Y-%m-%d"), by ='month')) ), 1) } )
不幸的是,我收到以下错误
Error in seq.POSIXt(from = start_date, to = as.POSIXct(df$end.date, :
'from' must be of length 1
我怎样才能做到这一点?
PS:start_date 和 df$end.date 在 data.table 中都是 POSIXct 格式。
【问题讨论】:
-
你没有在函数中使用你的
x参数。 -
不,您传递给
sapply的函数有一个参数x没有在函数中使用。相反,你使用df(或者start_date什么都不用)。 -
实际上,问题是你在
seqfunction 中传递了需要数值的日期。 -
是的,伙计们,@Starwhat 的函数中使用了 x
标签: r if-statement nested apply