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