【问题标题】:Time period between dates in RR中日期之间的时间段
【发布时间】:2016-06-15 04:30:46
【问题描述】:

我有一个带有 Id 列和日期列的数据框。

基本上,我想创建第三列 (Diff) 来计算日期之间的差异,最好按 ID 分组。

我从以下代码构造了一个大型 POSIXlt

c_time <- as.POSIXlt(df$Gf_Date)
a <- difftime(c_time[1:(length(c_time)-1)], c_time[2:length(c_time)], units = weeks")

但是,当我在我的 data.frame 上尝试 cbind 时,它会出错

“参数意味着不同的行数”

因为 a 比原始 data.frame 短一排。

任何帮助将不胜感激。

【问题讨论】:

  • 请不要发布您的数据图像。相反,请以其他用户可以复制的形式发布数据本身以重现您的情况。
  • 所以有一行时差为 0(或NA),因为它没有“前任”。您不能注入/预先添加这样的填充值吗?如果语义没问题,那总是使用派生差分列的方法,不是吗?但是我可能会在这里错过一些细节。正如@RHertel 很好地指出的那样,我也无法解决问题输入;-)
  • 感谢@RHertel 提供有关发帖的提示。我会确保包含一个可以操作的示例。

标签: r dataframe difftime


【解决方案1】:

由于只能在两个后续日期之间获取差异,因此对于第一个条目,它是未定义的。因此,一个合理的选择是将第一个值设置为NA

这可能有效:

c_time <- as.POSIXlt(df$Gf_Date)
a <- c(NA,`units<-`(diff(c_time),"weeks"))
cbind(df,diff.dates=a)

(向@thelatemail 致敬以获取简化a 定义的宝贵建议)。

PS:请注意,a 中的差异可能与您原来的方法有不同的符号。根据您喜欢的约定,您可以使用a &lt;- -a 在两者之间进行转换。

【讨论】:

  • 您可以简化diff 位,因为它默认返回difftime,可以转换为c(NA,`units&lt;-`(diff(x),"weeks")) 等周数
  • 太棒了,@thelatemail !您介意我在答案中包含您的建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 2018-04-30
  • 1970-01-01
  • 2022-01-01
  • 2016-09-17
  • 2017-09-14
  • 2015-10-01
相关资源
最近更新 更多