R:如何根据列方差选择数据表中的列?

时间:2017-05-17 00:37:27

标签: r dataframe data.table

我通常使用数据帧进行工作,但最近为了速度目的而试图获取数据表。它们对最近的一些文件非常有用。

无论如何,我有一个函数,用于计算列方差并从我的数据框中删除,一旦我已经读过它。

rm_invariant_cols = function(df) {

     df = df[, sapply(df, function(x) length(unique(x))>1)]   ## takes cols with one unique value and drops
     return(df)

}

df是数据表时,如何实现这一目标?当我在数据表上运行相同的函数时,我得到每列的逻辑集合,而不是列本身。

NB。我已经阅读了小插图,但似乎并没有涵盖这一点。

谢谢,

约翰

1 个答案:

答案 0 :(得分:3)

您可以使用with=FALSE

dt <- data.table(A = 1:3, B = c(1,1,1), C = c(2,1,3), D = c(2,2,2))

dt
#   A B C D
#1: 1 1 2 2
#2: 2 1 1 2
#3: 3 1 3 2

dt[, sapply(dt, uniqueN) > 1, with=FALSE]
#   A C
#1: 1 2
#2: 2 1
#3: 3 3

或者可能是@thelatemail建议的更惯用的方式:

dt[, .SD, .SDcols=lapply(dt, uniqueN) > 1]

#   A C
#1: 1 2
#2: 2 1
#3: 3 3