首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在data.table中按名称删除列?

如何在data.table中按名称删除列?
EN

Stack Overflow用户
提问于 2012-02-09 06:20:31
回答 7查看 191.7K关注 0票数 223

要在data.frame中删除名为"foo“的列,我可以这样做:

df <- df[-grep('foo', colnames(df))]

但是,一旦将df转换为data.table对象,就不可能只删除一列。

示例:

代码语言:javascript
复制
df <- data.frame(id = 1:100, foo = rnorm(100))
df2 <- df[-grep('foo', colnames(df))] # works
df3 <- data.table(df)
df3[-grep('foo', colnames(df3))] 

但是一旦它被转换成data.table对象,它就不再起作用了。

EN

回答 7

Stack Overflow用户

发布于 2013-10-22 04:42:18

您也可以使用set来实现这一点,这样可以避免循环中使用[.data.table的开销:

代码语言:javascript
复制
dt <- data.table( a=letters, b=LETTERS, c=seq(26), d=letters, e=letters )
set( dt, j=c(1L,3L,5L), value=NULL )
> dt[1:5]
   b d
1: A a
2: B b
3: C c
4: D d
5: E e

如果你想通过列名来做这件事,那么which(colnames(dt) %in% c("a","c","e"))应该适用于j

票数 31
EN

Stack Overflow用户

发布于 2013-05-20 04:39:13

我只是简单地在数据框中这样做:

代码语言:javascript
复制
DT$col = NULL

运行速度很快,据我所知不会造成任何问题。

更新:如果您的DT非常大,则不是最好的方法,因为使用$<-操作符将导致对象复制。所以更好地使用:

代码语言:javascript
复制
DT[, col:=NULL]
票数 21
EN

Stack Overflow用户

发布于 2015-07-03 10:02:58

非常简单的选项,如果您有许多单独的列要在数据表中删除,并且您希望避免键入所有列名#careadviced

代码语言:javascript
复制
dt <- dt[, -c(1,4,6,17,83,104)]

这将改为根据列号删除列。

它的效率显然不是很高,因为它忽略了data.table的优点,但是如果您处理的行数少于500,000行,它就可以很好地工作

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

https://stackoverflow.com/questions/9202413

复制
相关文章

相似问题

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