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

时间:2012-09-14 18:09:42

标签: r date loops for-loop lag

我正在尝试编写一个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))
}

似乎我正在创建新变量,但我知道滞后将无法正常工作,因为我缺少步骤。也许我也误解了其他人如何使用滞后函数的例子?

1 个答案:

答案 0 :(得分:1)

这样可以完全回答。你的代码有一些问题。卢卡诺已经指出了一个。每次通过循环,您将创建temptemp2temp3(或覆盖旧的)。因此,你将只留下最后一次循环的输出。

然而,这不是一个需要循环的东西。相反,您可以使用R

的矢量化特性
x <- 1:10

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

因此,如果您将这个概念与像plyr这样的库结合起来,可以很好地分割数据,那么您应该有一个可行的解决方案。如果我遗漏了某些内容或者这不能解决您的问题,请提供reproducible example

library(plyr)
myLag <- function(x) {
  c(x[-1], NA)
}

ddply(part2test, .(uniquerid), transform, EXAMDATE_LAG=myLag(EXAMDATE))

您也可以使用splitdata.table包使用by=参数在基础R中执行此操作。