如何使用单个critera过滤多个列

时间:2018-04-24 09:25:12

标签: r dplyr data-manipulation

我有

       4  5  6  7
1      3  3  3  3
2      1  2  2  1
3      2  1  1 NA
4      2  7  1 NA
5      1  1  1  1

我想在第1列到第4列中使用2或3过滤行,所以我只得到行1,2,4

我试过

df1%>%filter_at(vars(4:7), all_vars(c(2,3)) -> df2

返回

Error in filter_impl(.data, quo) : Result must have length 413, not 2

filter(d1[4:7]%in%c(1,3))

返回

Error in filter_impl(.data, quo) : Result must have length 413, not 4

我想避免使用

df1%>%filter(rowname1%in%c(1,3)|rowname1%in%c(1,3)| ...)

我没有得到语法。感谢

1 个答案:

答案 0 :(得分:1)

我们可以使用any_vars%in%来完成此任务。

library(dplyr)

df1 %>% filter_at(vars(1:4), any_vars(. %in% c(2, 3)))
#   X4 X5 X6 X7
# 1  3  3  3  3
# 2  1  2  2  1
# 3  2  1  1 NA
# 4  2  7  1 NA

或将==|一起使用。

df1 %>% filter_at(vars(1:4), any_vars(. == 2 | . == 3))
#   X4 X5 X6 X7
# 1  3  3  3  3
# 2  1  2  2  1
# 3  2  1  1 NA
# 4  2  7  1 NA

数据

df1 <- read.table(text = "       4  5  6  7
1      3  3  3  3
2      1  2  2  1
3      2  1  1 NA
4      2  7  1 NA
5      1  1  1  1",
                  header = TRUE, stringsAsFactors = FALSE)