我正在尝试按列拆分数据表,但是,一旦我获得数据表的列表,它们仍然包含拆分数据表的列。拆分完成后,如何删除此列。或者更可取的是,有没有一种方法可以删除多个列。
这是我的代码:
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谢谢
发布于 2015-10-21 04:41:35
除非你有一些奇特的并行化步骤可以遵循,否则拆分data.table是不值得的。即便如此,你最好还是坚持用一张桌子。
也就是说,我认为你想要
split( dt[, !"z"], dt$z )
# or more generally
mysplitDT <- function(x, bycols)
split( x[, !..bycols], x[, ..bycols] )
mysplitDT(dt, "z")如果你有一个data.frame,你也会遇到同样的问题:
df = data.frame(dt)
split( df[-which(names(df)=="z")], df$z )发布于 2015-10-21 04:28:58
首先想到的是遍历列表并删除z列。
lapply(split(dt, dt$z), function(d) { d$z <- NULL; d })
我刚刚注意到您使用的是data.table包,所以可能有一种更好的data.table方法来实现您想要的结果。
https://stackoverflow.com/questions/33246113
复制相似问题