Я относительно новичок в R, поэтому мне очень жаль, если есть очевидный ответ на этот вопрос. Я рассмотрел другие вопросы и думаю, что «применить» - это ответ, но я не могу понять, как его использовать в этом случае.
У меня есть лонгитюдный опрос, участники которого приглашаются каждый год. В какие-то годы они не принимают участия, а иногда умирают. Мне нужно определить, какие участники принимали участие в последовательной «полосе» с момента начала опроса (т.е. если они останавливаются, они останавливаются навсегда).
Я сделал это с помощью цикла for, который отлично работает в приведенном ниже примере. Но у меня много лет и много участников, и цикл очень медленный. Есть ли более быстрый подход, который я мог бы использовать?
В этом примере ИСТИНА означает, что они участвовали в этом году. Цикл создает два вектора - «последний год» для последнего года, в котором они участвовали, и «полосу», чтобы показать, завершили ли они все годы до последнего года (т. Е. Случаи 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
Спасибо!
mutate(dat, finalyear=max.col(dat[-1], 'last'), streak=rowSums(dat[-1])==finalyear)
04.09.2015