繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM