首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中拆分数据框时删除列

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

Stack Overflow用户
提问于 2015-10-21 04:20:37
回答 2查看 2K关注 0票数 2

我正在尝试按列拆分数据表,但是,一旦我获得数据表的列表,它们仍然包含拆分数据表的列。拆分完成后,如何删除此列。或者更可取的是,有没有一种方法可以删除多个列。

这是我的代码:

代码语言:javascript
复制
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)

生成的数据表子集如下所示

代码语言:javascript
复制
$`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

谢谢

EN

回答 2

Stack Overflow用户

发布于 2015-10-21 04:41:35

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

也就是说,我认为你想要

代码语言:javascript
复制
split( dt[, !"z"], dt$z )

# or more generally

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

mysplitDT(dt, "z")

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

代码语言:javascript
复制
df = data.frame(dt)
split( df[-which(names(df)=="z")], df$z )
票数 5
EN

Stack Overflow用户

发布于 2015-10-21 04:28:58

首先想到的是遍历列表并删除z列。

lapply(split(dt, dt$z), function(d) { d$z <- NULL; d })

我刚刚注意到您使用的是data.table包,所以可能有一种更好的data.table方法来实现您想要的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33246113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档