У меня есть следующий df:
df <- data.frame(ID = c(1,1,2,2,2,3,3,3,3),
Attendance = c(1, 1, NA, 1,1, NA, 1, NA, 1 ))
И я хочу этот:
df <- data.frame(ID = c(1,1,2,2,2,3,3,3,3),
Attendance = c(1, 1, NA, 1,1, NA, 1, NA, 1),
Visit = c(1,2,0,1,2,0,1,0,2))
Как я могу рассчитывать каждый раз (cumsum) идентификатор появляется в «Посещение»столбец, основанный на значении столбца «Посещаемость» при игнорировании NA или 0?
Я пробовал что-то с ave функцией, подобной этой, но безуспешно:
df$Visit <- ifelse(!is.na(df$ID), (ave(df$ID, df$ID, FUN=cumsum))/df$ID, 0)
Я добился результата, создав вспомогательный df с помощью:
aux <- df[complete.cases(df$Attendance),]
Подсчет посещений с помощью функции Ave и затем слияние , но я уверен, что существуетсамый простой способ