我要确保该列至少有2个观察值大于0。如何删除只有一个观察值大于0的多个列;
Date | Item1 | Item2 | Item3 | Item4
10/10/12 | 1 | 1 | 1 | 0
10/11/12 | 0 | 5 | 2 | 2
10/12/12 | 0 | 3 | 0 | 0
10/13/12 | 0 | 2 | 0 | 0
10/14/12 | 0 | 2 | 0 | 0
Item1
列应从数据框中删除。
答案 0 :(得分:0)
这是基本的R选项。我们可以使用apply
来获取数据帧中每一列的非零计数。然后,我们可以在仅保留具有多个非零值的列的情况下对数据帧进行子集处理。
counts <- sapply(df, function(x) {
sum(x > 0)
})
df[, counts > 1]
答案 1 :(得分:0)
我们可以使用colSums
并保留至少两个大于0的值的列。我们在此处使用[-1]忽略Date
列,并检查剩余列的大于0条件。
cbind(df[1], df[-1][colSums(df[-1] > 0) >= 2])
# Date Item2 Item3
#1 10/10/12 1 1
#2 10/11/12 5 2
#3 10/12/12 3 0
#4 10/13/12 2 0
#5 10/14/12 2 0
Item1
和Item4
列被删除,因为它们两个都只有一个观察值大于0。
另一个选择是select_if
中的dplyr
使用相同的逻辑
library(dplyr)
bind_cols(df[1], df[-1] %>% select_if(funs(sum(. > 0) >= 2)))