如果列中所有单元格都带有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
有什么想法吗?
谢谢!
答案 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