簡體   English   中英

子集 data.table 按列類型 R

[英]Subset data.table by column type R

在一個很大的差距之后使用 R.. 我需要清理一個大數據集,這個過程中的兩個步驟是:

  1. 忽略/刪除所有非數字列
  2. 忽略/刪除超過x % 零條目的列

data.table的實現方式是什么?

我已經能夠使用subset完成第一部分:

subset(dat, select = which(as.vector(dat[, lapply(.SD, class)])=='numeric'))

但第二部分同樣的方法失敗了:

which(dat[, lapply(.SD, function(z){return(sum(z, na.rm = T))})] != 0)

有沒有一種data.table的方法可以在一個簡單的語句中做到這一點?

您可以使用.SDcols ,請參見下面的mtcars示例:

dt <- as.data.table(mtcars)

pct = .5
dt[,.SD,.SDcols=function(col){is.numeric(col)&((sum(col==0)/length(col))<pct)}]

      mpg   cyl  disp    hp  drat    wt  qsec  gear  carb
    <num> <num> <num> <num> <num> <num> <num> <num> <num>
 1:  21.0     6 160.0   110  3.90 2.620 16.46     4     4
 2:  21.0     6 160.0   110  3.90 2.875 17.02     4     4
 3:  22.8     4 108.0    93  3.85 2.320 18.61     4     1
 4:  21.4     6 258.0   110  3.08 3.215 19.44     3     1
 5:  18.7     8 360.0   175  3.15 3.440 17.02     3     2
 6:  18.1     6 225.0   105  2.76 3.460 20.22     3     1
 7:  14.3     8 360.0   245  3.21 3.570 15.84     3     4
 8:  24.4     4 146.7    62  3.69 3.190 20.00     4     2
...

這刪除了vsam列,因為0的百分比太高了。
如果您采用pct=0.6 ,這些列將被保留。

暫無
暫無

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

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