data.table的子集,不包括某些列

时间:2015-05-17 05:07:51

标签: r data.table

我只需从data.table中排除一组列。我可以使用-c()使用这些列的数量来完成此操作:

dti <- data.table(iris)
dti1 <- dti[, -c(3,5), with=F]

但我想使用列名而不是数字,比如

colsExcl <- c('Petal.Length', 'Species');
dti1 <- dti[, -c(colsExcl), with=F] # error: invalid argument to unary operator

1 个答案:

答案 0 :(得分:2)

您可以尝试setdiff:= NULL,但行为不同。

使用setdiff,您必须将输出分配给另一个对象:

colsExcl <- c('Petal.Length', 'Species')
dti1 <- dti[, setdiff(names(dti), colsExcl), with = FALSE]

相比之下,使用:= NULL会删除原始data.table中的列:

dti[, (colsExcl) := NULL][]
#      Sepal.Length Sepal.Width Petal.Width
#   1:          5.1         3.5         0.2
#   2:          4.9         3.0         0.2
#   3:          4.7         3.2         0.2
#   4:          4.6         3.1         0.2
#   5:          5.0         3.6         0.2
#  ---                                     
# 146:          6.7         3.0         2.3
# 147:          6.3         2.5         1.9
# 148:          6.5         3.0         2.0
# 149:          6.2         3.4         2.3
# 150:          5.9         3.0         1.8