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
关联的行 both 变量 n1
中的值 1 和值 1在变量 n2
.
中
在此示例中,满足此条件的三行是“firm a”、“firm b”和“firm e”。
我曾尝试在 dplyr
中使用 filter
函数,但我找不到如何根据其他两个变量中的值来调节一个变量。
排列完 id
列后,我们可以使用 lead
函数,然后使用 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
我的数据集如下:
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
关联的行 both 变量 n1
中的值 1 和值 1在变量 n2
.
在此示例中,满足此条件的三行是“firm a”、“firm b”和“firm e”。
我曾尝试在 dplyr
中使用 filter
函数,但我找不到如何根据其他两个变量中的值来调节一个变量。
排列完 id
列后,我们可以使用 lead
函数,然后使用 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