R 给定事件后第一次观察的子集行

R 给定事件后第一次观察的子集行,r,dplyr,R,Dplyr,我正在努力实现以下目标: 按id分组数据 删除发生“3”后的所有行 查找“3”之前最近的“1”、“2”或NA,并仅保留该行 我的数据: data <- data.frame( id=c(1,1,1,1,1, 2,2,2,2, 3,3,3), a=c(NA,1,2,3,3, NA,3,2,3, 1,5,3)) 但这似乎很离谱 谢谢。这将问题分解为不同的步骤 data %>% group_by(id) %>% filter(row_number()<first

我正在努力实现以下目标:

  • 按id分组数据

  • 删除发生“3”后的所有行

  • 查找“3”之前最近的“1”、“2”或NA,并仅保留该行

  • 我的数据:

    data <- data.frame(
    id=c(1,1,1,1,1, 2,2,2,2, 3,3,3), 
    a=c(NA,1,2,3,3, NA,3,2,3, 1,5,3))
    
    但这似乎很离谱


    谢谢。

    这将问题分解为不同的步骤

    data %>% 
      group_by(id) %>% 
      filter(row_number()<first(which(a==3))) %>% # drop things past a 3
      filter(a %in% c(1,2,NA)) %>%                # only keep 1,2 or NA
      filter(row_number()==n())                   # choose the last row in each group
    
    数据%>%
    分组依据(id)%>%
    筛选(行数()%#将内容放在3之后
    过滤器(在%c(1,2,NA)中的百分比)%>%#仅保留1,2或NA
    筛选(行数()==n())#选择每组中的最后一行
    
    data %>% group_by(id) %>% slice(if(first(a) == 3))
    
    data %>% 
      group_by(id) %>% 
      filter(row_number()<first(which(a==3))) %>% # drop things past a 3
      filter(a %in% c(1,2,NA)) %>%                # only keep 1,2 or NA
      filter(row_number()==n())                   # choose the last row in each group