dplyr过滤器无法通过多列工作

时间:2018-10-17 10:02:01

标签: r filter dplyr

df <- data.frame(code = rep(1:10, each = 3 * 3),
             type = rep(c("a", "b", "c"), each = 10 * 3),
             year = rep(1980:1982, each = 10 * 3),
             x = rnorm(90))

df <- df %>% dplyr::arrange(code, year, type)

我要删除其中type == acode为1、3或4的CODE的所有行。

exclude.code <- c(1, 3, 4)

new.df <- df %>% dplyr::filter(!code %in% exclude.code & type != "a")

但这将删除所有不等于a的类型,即使我只想删除代码为1、3或4的那些a。我在做什么错呢?

编辑

我在评论中尝试了该方法,但仍然没有效果

head(df %>% dplyr::filter((!code %in% exclude.code) & type != "a"))

 code type year    x
  5    b 1981 -1.0564839
  5    b 1981  1.5385139
  5    b 1981  0.5709470
  5    b 1981  0.4728047
  5    b 1981 -0.3739578
  5    b 1981  0.6338270

1 个答案:

答案 0 :(得分:3)

只需使用此:

df %>% dplyr::filter( !((code %in% exclude.code) & (type == "a")) )
  • 这个 (code %in% exclude.code) & (type == "a")为您提供了您不想要的东西。

  • 然后在整个内容上应用!以“删除”它们。