如果所有值都是特定值,则删除一列

时间:2020-08-12 17:03:41

标签: r

如果列中所有单元格都带有No Items,我想删除一列。

df1 <- data.frame(cat =   c(1,1,1,"No items",2,2,2,"No items"),
                  item1 = c(0,0,1,0,1,1,"No items",0),
                  item2 = c("No items","No items","No items","No items","No items","No items","No items","No items"),
                  item3 = c(0,0,1,"No items",1,0,0,0))

> df1
       cat    item1    item2    item3
1        1        0 No items        0
2        1        0 No items        0
3        1        1 No items        1
4 No items        0 No items No items
5        2        1 No items        1
6        2        1 No items        0
7        2 No items No items        0
8 No items        0 No items        0

在这种情况下,我需要删除item2列。所需的输出将是:

> df1
       cat    item1    item3
1        1        0        0
2        1        0        0
3        1        1        1
4 No items        0 No items
5        2        1        1
6        2        1        0
7        2 No items        0
8 No items        0        0

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

一种base R方法,

df1[,colSums(df1 == "No items") != nrow(df1)]

给予

       cat    item1    item3
1        1        0        0
2        1        0        0
3        1        1        1
4 No items        0 No items
5        2        1        1
6        2        1        0
7        2 No items        0
8 No items        0        0

答案 1 :(得分:2)

1。 base的{​​{1}}解决方案:

Filter()

2。使用Filter(function(x) !all(x == "No items"), df1) purrr的{​​{1}}解决方案:

keep()

3。 discard()的{​​{1}}解决方案:

library(purrr)

## Option 1 : keep
keep(df1, ~ !all(.x == "No items"))

## Option 2 : discard
discard(df1, ~ all(.x == "No items"))

输出

dplyr