在 R 中拆分数据框时删除列

Lau*_*šys 2 r data.table

我正在尝试按列拆分数据表,但是一旦我获得数据表列表,它们仍然包含数据表被拆分的列。拆分完成后,我将如何删除此列。或者更优选地,有没有办法如何删除多个列。

这是我的代码:

x <- rnorm(10, mean = 5, sd = 2)
y <- rnorm(10, mean = 5, sd = 2)
z <- sample(5, 10, replace = TRUE)
dt <- data.table(x, y, z)

split(dt, dt$z)
Run Code Online (Sandbox Code Playgroud)

生成的数据表子集看起来像这样

$`1`
          x        y z
1: 6.179790 5.776683 1
2: 5.725441 4.896294 1
3: 8.690388 5.394973 1

$`2`
          x        y z
1: 5.768285 3.951733 2
2: 4.572454 5.487236 2

$`3`
          x        y z
1: 5.183101 8.328322 3
2: 2.830511 3.526044 3

$`4`
          x        y z
1: 5.043010 5.566391 4
2: 5.744546 2.780889 4

$`5`
          x          y z
1: 6.771102 0.09301977 5
Run Code Online (Sandbox Code Playgroud)

谢谢

Fra*_*ank 5

除非您有一些奇特的并行化步骤要遵循,否则拆分 data.table 真的不值得。即便如此,您最好还是坚持使用一张桌子。

也就是说,我想你想要

split( dt[, !"z"], dt$z )

# or more generally

mysplitDT <- function(x, bycols) 
  split( x[, !..bycols], x[, ..bycols] )

mysplitDT(dt, "z")
Run Code Online (Sandbox Code Playgroud)

如果你有一个 data.frame,你会遇到同样的问题:

df = data.frame(dt)
split( df[-which(names(df)=="z")], df$z )
Run Code Online (Sandbox Code Playgroud)

  • @LaurynasStašys `DT[ ,{ non_outliers &lt;- ...; .SD[ non_outliers ]}, by=z]` 其中`...` 是使用`DT` 的列来确定不是异常值的行的代码。data.table 旨在很好地与按组操作一起使用。包的介绍材料通过几个例子说明了它的语法:https://github.com/Rdatatable/data.table/wiki/Getting-started (2认同)