假设您想对 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] 删除。
我来说两句