簡體   English   中英

根據匯總統計過濾掉data.table列

[英]Filter out data.table columns based on summary statistics

我經常需要從 data.table 中篩選出低方差的列。 列名是事先未知的。

dt = data.table(mtcars)

# calculate standard deviation with arbitrary max value of 1:
mask = dt[,lapply(.SD, function(x) sd(x, na.rm = TRUE) > 1)]

# The columns with the FALSE values in row 1 need to be removed
mask.t = t(mask)
mask.t = which(mask.t)
dt[,mask.t,with=FALSE] 

上面的方法很笨拙。 有沒有更優雅的方法來過濾列統計數據為 TRUE 的 data.table 中的列?

這些工作:

dt[, .SD, .SDcols=unlist(mask)] 

dt[, .SD, .SDcols=which(unlist(mask))]

現在都在一起了:

variance.filter = function(df) {
  mask = df[,lapply(.SD, function(x) sd(x,na.rm = TRUE) > 1)]
  df = df[, .SD, .SDcols = unlist(mask)] 
}

data.table (1.12.9) 的當前開發版本中data.table.SDcols接受列的函數過濾器,因此這將起作用:

variance.filter = function(df) {
  df[ , .SD, .SDcols = function(x) sd(x, na.rm = TRUE) > 1]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM