我通常使用数据帧进行工作,但最近为了速度目的而试图获取数据表。它们对最近的一些文件非常有用。
无论如何,我有一个函数,用于计算列方差并从我的数据框中删除,一旦我已经读过它。
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。我已经阅读了小插图,但似乎并没有涵盖这一点。
谢谢,
约翰
答案 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