【发布时间】:2017-07-19 05:56:06
【问题描述】:
如果 id 相同,我想获取 2 个连续行的日期差异。
一个简单的代码是:
for(i in 2:nrow(Data))
{
if(id[i]==id[i-1]
{
dated[i]-dated[i-1]
}
}
但是这种循环需要很长时间才能执行。有没有更快的方法在超过 200 万行上运行这种代码?
【问题讨论】:
标签: r loops if-statement
如果 id 相同,我想获取 2 个连续行的日期差异。
一个简单的代码是:
for(i in 2:nrow(Data))
{
if(id[i]==id[i-1]
{
dated[i]-dated[i-1]
}
}
但是这种循环需要很长时间才能执行。有没有更快的方法在超过 200 万行上运行这种代码?
【问题讨论】:
标签: r loops if-statement
我们可以通过data.table 做到这一点。将'data.frame'转换为'data.table'(setDT(df1)),按'id'分组,得到'dated'列的差异(diff)
library(data.table)
setDT(df1)[, .(datedifference = diff(dated)), id]
【讨论】:
setDT(df1)[, datedifference := c(NA, diff(dated)), id]