我希望删除数据框中填充了一个(或一定数量)单元格的列。其他类似的问题/答案都是基于过滤出只有一个唯一的指定值的行来指定的,但是这不是我想要实现的。
请参阅下表并意识到,如果我希望删除填充了三个或更少单元格的列,答案将是删除前三列。对于删除填充了特定数量列的行,也会出现同样的问题。
Tidy/Dplyr答案优先。
df <- structure(list(Site = c("A", "B", "C", "D", "E", "F", "G", "H", "I"), X1= c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 3L), X2 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 10L, 0L), X3 = c(0L, 0L, 0L, 0L, 0L, 3L, 6L, 0L, 0L), X4 = c(0L, 9L, 4L, 1L, 8L, 6L, 0L, 0L, 0L), X5 = c(6L, 5L, 2L, 5L, 1L, 5L, 2L, 0L, 0L)), class = "data.frame", row.names = c(NA, -9L))
Site X1 X2 X3 X4 X5
1 A 0 0 0 0 6
2 B 0 0 0 9 5
3 C 0 0 0 4 2
4 D 0 0 0 1 5
5 E 0 0 0 8 1
6 F 0 0 3 6 5
7 G 0 0 6 0 2
8 H 0 10 0 0 0
9 I 3 0 0 0 0
3条答案
按热度按时间pgvzfuti1#
我们可以使用
select(where(...))
:(我推断
NA
也不算,但无论哪种方式,如果你有NA
s,那么==
无论如何都不能完美地工作。dxxyhpgq2#
另一种选择是将所有
0
替换为NA
,并使用purrr::map_df(~ sum(!is.na(.)))
对其进行计数,然后创建一个命名向量,然后选择具有更多1
条目的每一列:ntjbwcob3#
使用 colSums 计数非零,然后子集: