我有一系列以ID表示的个人,这些ID按顺序与地址关联.其中一些人(但不是所有人)的地址带有正匹配码(匹配码=1).我想删除匹配码之前的所有地址,保留匹配码为正的地址,保留匹配码之后的地址.我还想保留所有的地址,如果这个人没有一个积极的匹配代码.因此,从这个虚拟数据:

ID = c("id1", "id1", "id1", "id2", "id2", "id2", "id3", "id3", "id3", "id4", "id4", "id4")
matchcode = c(0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0)
address = c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l")

df = data.frame(ID, matchcode, address)

df <- df %>% group_by(ID) %>% mutate(order = row_number()) %>% ungroup

我想得到这个:

  ID    matchcode address order
  <chr>     <dbl> <chr>   <int>
1 id1           0 a           1
2 id1           1 b           2
3 id2           0 d           1
4 id2           0 e           2
5 id2           1 f           3
6 id3           0 g           1
7 id3           0 h           2
8 id3           0 i           3
9 id4           1 j           1

任何帮助都将不胜感激.

推荐答案

按"ID"分组后,将"matchcode"中1的位置设置为match,然后获取seq,并使用slice对行进行子集设置.如果没有 case ,nomatch将返回行数(n()),因此我们得到所有观察结果

library(dplyr)
df %>% 
  group_by(ID) %>%
  slice(seq_len(match(1, matchcode, nomatch = n()))) %>%
  ungroup

-输出

# A tibble: 9 × 4
  ID    matchcode address order
  <chr>     <dbl> <chr>   <int>
1 id1           0 a           1
2 id1           1 b           2
3 id2           0 d           1
4 id2           0 e           2
5 id2           1 f           3
6 id3           0 g           1
7 id3           0 h           2
8 id3           0 i           3
9 id4           1 j           1

还是filter

df %>%
   group_by(ID) %>% 
   filter(cumsum(c(0, diff(matchcode))) >=0) %>%
   ungroup

-输出

# A tibble: 10 × 4
   ID    matchcode address order
   <chr>     <dbl> <chr>   <int>
 1 id1           0 a           1
 2 id1           1 b           2
 3 id1           0 c           3
 4 id2           0 d           1
 5 id2           0 e           2
 6 id2           1 f           3
 7 id3           0 g           1
 8 id3           0 h           2
 9 id3           0 i           3
10 id4           1 j           1

R相关问答推荐

混淆矩阵,其中每列和等于1

对lme 4对象运行summary()时出错(diag中的错误(from,names = RST):对象unpackedMatrix_diag_get找不到)

根据R中的另一个日期从多列中 Select 最近的日期和相应的结果

如何计算前一行的值,直到达到标准?

如何利用模型函数在格图中添加双曲/指数曲线

R for循环返回到先前值

如何直接从Fortran到R的数组大小?

如何在Chart_Series()中更改轴值的 colored颜色 ?

条形图和在Ploly中悬停的问题

如何从像glm这样的模型中提取系数表的相关性?

在数组索引上复制矩阵时出错

将选定的索引范围与阈值进行比较

将多个列值转换为二进制

自定义gggraph,使geom_abline图层仅在沿x轴的特定范围内显示

如何从向量构造一系列双边公式

创建在文本字符串中发现两个不同关键字的实例的数据框

整理ggmosaic图的标签

在不带max()的data.table中按组查找最后一个元素

如何在R曲线图弹出窗口中更改r和theta标签

用LOOCV进行K近邻问题