Dplyr:标记满足两个条件的行

时间:2019-11-14 19:41:32

标签: r dplyr

对于给定的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))

谢谢

1 个答案:

答案 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”值