我对R语言还比较陌生,如果有显而易见的答案,请见谅。我查看了其他问题,我认为“apply”是答案,但我无法弄清如何在这种情况下使用它。
我有一份纵向调查,参与者每年都会受邀。有些年份他们未能参加,有时他们会去世。我需要确定自调查开始以来连续参与的参与者(即如果他们停止参与,他们就永远停止了)。
我使用了一个“for”循环来完成此操作,在下面的示例中运行良好。但是我有很多年份和很多参与者,循环速度非常慢。是否有更快的方法可用?
在这个例子中,TRUE表示他们在那一年参加了调查。该循环创建两个向量 - “finalyear”表示他们最后一年参加的调查,而“streak”则表示他们是否在最后一年之前完成了所有年份(即情况1、3和5)。
dat <- data.frame(ids = 1:5, "1999" = c(T, T, T, F, T), "2000" = c(T, F, T, F, T), "2001" = c(T, T, T, T, T), "2002" = c(F, T, T, T, T), "2003" = c(F, T, T, T, F))
finalyear <- NULL
streak <- NULL
for (i in 1:nrow(dat)) {
x <- as.numeric(dat[i,2:6])
y <- max(grep(1, x))
finalyear[i] <- y
streak[i] <- sum(x) == y
}
dat$finalyear <- finalyear
dat$streak <- streak
谢谢!