【问题标题】:Delete the the observations by matching the two column values通过匹配两列值删除观察
【发布时间】:2022-08-17 01:33:54
【问题描述】:

我有数据df。我想删除最后的观察after matching two column values,即cate=Yes ~ value=1

df <- data.frame(id=c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,5,5,6,6,6,6,7,7,7,7,7),
       cate=c(\'No\',\'Yes\',\'Yes\',\'No\',\'Yes\',\'No\',\'Yes\',\'Yes\',\'Yes\',\'No\',\'No\',\'No\',\'Yes\',\'Yes\',
 \'No\',\'No\',\'Yes\',\'Yes\',\'No\',NA,\'No\',\'Yes\',\'Yes\',\'Yes\',\'No\',\'Yes\',\'Yes\',\'Yes\',\'Yes\'),
                 value=c(0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0))
df
   id cate value
1   1   No     0
2   1  Yes     0
3   1  Yes     0
4   1   No     0
5   1  Yes     0
6   2   No     0
7   2  Yes     1
8   2  Yes     0
9   2  Yes     0
10  2   No     0
11  3   No     0
12  3   No     0
13  3  Yes     0
14  3  Yes     0
15  3   No     0
16  4   No     0
17  4  Yes     0
18  4  Yes     0
19  5   No     0
20  5  Yes     0
21  6   No     0
22  6  Yes     1
23  6  Yes     0
24  6  Yes     0
25  7   No     0
26  7  Yes     1
27  7  Yes     1
28  7  Yes     0
29  7  Yes     0

我想在匹配cate=Yes and value=1 后删除每个组 id 的观察结果。

那么预期的输出是

   id cate value
1   1   No     0
2   1  Yes     0
3   1  Yes     0
4   1   No     0
5   1  Yes     0
6   2   No     0
7   2  Yes     1
8   3   No     0
9   3   No     0
10  3  Yes     0
11  3  Yes     0
12  3   No     0
13  4   No     0
14  4  Yes     0
15  4  Yes     0
16  5   No     0
17  5  Yes     0
18  6   No     0
19  6  Yes     1
20  7   No     0
21  7  Yes     1

    标签: r dplyr


    【解决方案1】:

    我们可以使用

    library(dplyr)
    df %>% 
      group_by(id) %>% 
      filter(cumsum(cumsum(cate == 'Yes' & value == 1))<= 1) %>%
      ungroup
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多