要在data.frame中删除名为“foo”的列,我可以这样做:
df <- df[-grep('foo', colnames(df))]
然而,一旦df被转换为数据。表对象时,没有办法直接删除列。
例子:
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))]
但是一旦它被转换成数据。Table对象,这个不再有效。
你也可以使用set,这样可以避免使用[.data]的开销。循环表:
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
如果你想通过列名来做,(colnames(dt) %in% c("a","c","e"))应该适用于j。
你也可以使用set,这样可以避免使用[.data]的开销。循环表:
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
如果你想通过列名来做,(colnames(dt) %in% c("a","c","e"))应该适用于j。