基于两列之间的滞后的子集数据框

希利亚姆

假设您想对 data.frame 进行子集化,其中保留行的规则基于行 'a' 和 'b' 之间的滞后:

# input
df <- data.frame(a = c(1,0,0,0,1,0,0,0,0,0,0,0),
                 b = c(0,1,1,0,0,1,1,0,0,0,1,1))

#output
  a b
1 1 0
2 0 1
3 0 1
4 1 0
5 0 1
6 0 1

本质上,如果'a' = 1您想保留该行以及 'b' 中后续运行的值为 1 的行a = 0 & b = 0此捕获将继续直到下一行带有. 我试过使用嵌套的“ifelse()”语句,但我被困在基于滞后问题的逻辑测试中。

建议?

维茨·德·弗里斯

这就是我要做的。可能有一些选项需要少 1 或 2 行。

df <- data.frame(a = c(1,0,0,0,1,0,0,0,0,0,0,0),
                 b = c(0,1,1,0,0,1,1,0,0,0,1,1))

library(dplyr)

df %>% 
  mutate(grp = cumsum(a==1|a+b==0)) %>%
  group_by(grp) %>%
  filter(any(a == 1)) %>%
  ungroup() %>%
  select(a, b)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章