我正在尝试逐列拆分数据,但是一旦获得数据表列表,它们仍然包含数据表被拆分的列。拆分完成后,如何删除此列。或者更优选的是,我是如何删除多列的。
这是我的代码:
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)
结果数据表子集看起来像
$`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
由于
答案 0 :(得分:3)
除非你有一些花哨的并行化步骤,否则拆分data.table真的是不值得的。即便如此,你最好还是坚持使用一张桌子。
那就是说,我想你想要
split( dt[, !"z", with=FALSE], dt$z )
# or more generally
mysplitDT <- function(x, bycols)
split( x[, !bycols, with=FALSE], x[, bycols, with=FALSE] )
mysplitDT(dt, "z")
如果您有data.frame:
,则会遇到同样的问题df = data.frame(dt)
split( df[-which(names(df)=="z")], df$z )
答案 1 :(得分:1)
首先想到的是遍历列表并删除z
列。
lapply(split(dt, dt$z), function(d) { d$z <- NULL; d })
我刚刚注意到您使用的是data.table
软件包,因此可能有更好的data.table
方法来实现您想要的结果。