[英]How to match one row from one column to the next 5-10 rows in two other columns in R?
[英]R filter rows such that one column is conditional on two other columns
我的数据集如下:
df <- tibble(id = c("firm a","firm b","firm c","firm d","firm e","firm a","firm e","firm b","firm f","firm g"),
n1 = c(1,1,1,1,1,0,0,0,0,0),
n2 = c(0,0,0,0,0,1,1,1,1,1))
id n1 n2
<chr> <dbl> <dbl>
1 firm a 1 0
2 firm b 1 0
3 firm c 1 0
4 firm d 1 0
5 firm e 1 0
6 firm a 0 1
7 firm e 0 1
8 firm b 0 1
9 firm f 0 1
10 firm g 0 1
我只想过滤变量id
与变量n1
中的值 1 和变量n2
中的值 1 相关联的行。
在此示例中,满足此条件的三行是“公司 a”、“公司 b”和“公司 e”。
我曾尝试在 dplyr 中使用filter
dplyr
,但我找不到如何根据其他两个变量中的值来调节一个变量。
安排列id
后,我们可以lead
function ,然后使用if_all
过滤:
library(dplyr)
df %>%
arrange(id) %>%
mutate(n2=lead(n2, default = n2[1])) %>%
filter(if_all(n1:n2, ~ . == 1))
id n1 n2
<chr> <dbl> <dbl>
1 firm a 1 1
2 firm b 1 1
3 firm e 1 1
df %>%
group_by(id) %>%
filter(any(n1 == 1), any(n2 == 1))
# A tibble: 6 x 3
# Groups: id [3]
id n1 n2
<chr> <dbl> <dbl>
1 firm a 1 0
2 firm b 1 0
3 firm e 1 0
4 firm a 0 1
5 firm e 0 1
6 firm b 0 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.