R-请帮忙.为滞后日期的循环编写时遇到问题



我正试图编写一个for循环,该循环将按人员id获取数据帧的子集,然后将EXAMDATE变量滞后一个进行比较。因此,给定的行将具有原始EXAMDATE和变量EXAMDATE_LAG,该变量将在其前面一行包含EXAMDATE的值。

for (i in length(uniquerid))
{
    temp <- subset(part2test, RID==uniquerid[i])
    temp$EXAMDATE_LAG <- temp$EXAMDATE
    temp2 <- data.frame(lag(temp, -1, na.pad=TRUE))  
    temp3 <- data.frame(cbind(temp,temp2))
}

看起来我创建新变量很好,但我知道滞后不会正常工作,因为我错过了步骤。也许我也误解了其他人关于如何使用滞后函数的例子?

这样就可以完全回答这个问题。您的代码有一些错误。卢卡诺指出了一点。每次循环时,您都要创建temptemp2temp3(或覆盖旧的)。因此,您将只剩下最后一次循环的输出。

然而,这并不需要循环。相反,您可以利用R 的矢量化特性

x <- 1:10
> c(x[-1], NA)
 [1]  2  3  4  5  6  7  8  9 10 NA

因此,如果您将这个概念与plyr这样的库相结合,它可以很好地分割数据,那么您应该有一个可行的解决方案。如果我遗漏了什么,或者这不能解决你的问题,请提供一个可重复的例子。

library(plyr)
myLag <- function(x) {
  c(x[-1], NA)
}
ddply(part2test, .(uniquerid), transform, EXAMDATE_LAG=myLag(EXAMDATE))

您也可以在基本R中使用split或在data.table包中使用其by=参数来执行此操作。

最新更新