对于给定的ID,我试图确定符合条件(= 1或= 2)的最新观测值(最后一波或最高波数)
我的数据:
data <- data.frame(id=c(1,1,1, 2,2,2, 3,3,3), wave=c(1,2,3, 1,2,3, 1,2,3), var=c(NA,1,2, 1,2,NA, 3,1,3))
结果:
outcome <- data.frame(id=c(1,1,1, 2,2,2, 3,3,3), wave=c(1,2,3, 1,2,3, 1,2,3), var=c(NA,1,2, 1,2,NA, 3,1,3), flag=c(0,0,1, 0,1,0, 0,1,0))
我似乎无法弄清楚如何指定仅标记给定ID的最新/最后一行
data %>% group_by(id) %>% mutate(flag=if_else(var %in% c(1,2) & ...,1,0))
谢谢
答案 0 :(得分:2)
将'wave'细分,获得max
,将'==
)与'wave'列进行比较并转换为整数
library(dplyr)
data %>%
group_by(id) %>%
mutate(flag = as.integer(wave == max(wave[var %in% 1:2])))
# A tibble: 9 x 4
# Groups: id [3]
# id wave var flag
# <dbl> <dbl> <dbl> <int>
#1 1 1 NA 0
#2 1 2 1 0
#3 1 3 2 1
#4 2 1 1 0
#5 2 2 2 1
#6 2 3 NA 0
#7 3 1 3 0
#8 3 2 1 1
#9 3 3 3 0
在这里,我们假设每个“ id”都有唯一的“ wave”值