我是R的相對新手,所以我很抱歉如果有明顯的答案。我看過其他問題,我認爲「適用」就是答案,但在這種情況下我無法解決如何使用它。比'for'循環更有效的使用R的方法
我有一個縱向調查,每年邀請參與者。有些年代他們沒有參加,有時他們會死。從調查開始以來,我需要確定哪些參與者參加了一致的「連勝」(即,如果他們停止,他們會停下來)。
我已經用'for'循環完成了這個工作,它在下面的例子中工作正常。但是我有很多年和很多參與者,而且循環很慢。我可以使用更快的方法嗎?
在這個例子中,TRUE意味着他們參加了那一年。該循環創建了兩個向量 - 「finalyear」表示他們參加的最後一年,以及「連勝」表明他們是否已經完成了前幾年(即情況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
謝謝!
很多答案 - 任何人都想創建一個更大的數據集並進行基準測試?數據集有多大,因此有可能爲基準測試做一個有代表性的測試集? – Spacedman
約25萬個案件和25年。下面的所有答案解決了我的問題 - 謝謝大家!如果人們感興趣,我可以製作一個用於測試不同方法的代表性數據集。 –