要在data.frame
中删除名为"foo“的列,我可以这样做:
df <- df[-grep('foo', colnames(df))]
但是,一旦将df
转换为data.table
对象,就不可能只删除一列。
示例:
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
对象,它就不再起作用了。
发布于 2013-10-22 04:42:18
您也可以使用set
来实现这一点,这样可以避免循环中使用[.data.table
的开销:
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
。
发布于 2013-05-20 04:39:13
我只是简单地在数据框中这样做:
DT$col = NULL
运行速度很快,据我所知不会造成任何问题。
更新:如果您的DT非常大,则不是最好的方法,因为使用$<-
操作符将导致对象复制。所以更好地使用:
DT[, col:=NULL]
发布于 2015-07-03 10:02:58
非常简单的选项,如果您有许多单独的列要在数据表中删除,并且您希望避免键入所有列名#careadviced
dt <- dt[, -c(1,4,6,17,83,104)]
这将改为根据列号删除列。
它的效率显然不是很高,因为它忽略了data.table的优点,但是如果您处理的行数少于500,000行,它就可以很好地工作
https://stackoverflow.com/questions/9202413
复制相似问题