【发布时间】:2018-10-31 07:13:22
【问题描述】:
我想在列总和不为零的数据框中选择或子集变量,但也保留其他因子变量。它应该相当简单,但我不知道如何使用dplyr 对变量子集运行select_if() 函数:
df <- data.frame(
A = c("a", "a", "b", "c", "c", "d"),
B = c(0, 0, 0, 0, 0, 0),
C = c(3, 0, 0, 1, 1, 2),
D = c(0, 3, 2, 1, 4, 5)
)
require(dplyr)
df %>%
select_if(funs(sum(.) > 0))
#Error in Summary.factor(c(1L, 1L, 2L, 3L, 3L, 4L), na.rm = FALSE) :
# ‘sum’ not meaningful for factors
然后我尝试只选择B, C, D,这可行,但我不会有变量A:
df %>%
select(-A) %>%
select_if(funs(sum(.) > 0)) -> df2
df2
# C D
#1 3 0
#2 0 3
#3 0 2
#4 1 1
#5 1 4
#6 2 5
我可以简单地做cbind(A = df$A, df2),但由于我有一个包含 3000 行和 200 列的数据集,我担心这可能会引入错误(例如,如果值排序不同)。
尝试在sum() 函数中对变量B, C, D 进行子集化也不起作用:
df %>%
select_if(funs(sum(names(.[2:4])) > 0))
#data frame with 0 columns and 6 rows
【问题讨论】: