2015-05-17 151 views
0

我只需要从我的data.table中排除一组列。我可以通过使用-c()与这些列数做到这一点:data.table的子集不包括某些列

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

这对我的作品不任何错误。 – Metrics

+1

@Metrics,真的吗?你使用的是什么版本的“data.table”? – A5C1D2H2I1M1N2O1R2T1

+0

@AnandaMahto:我正在使用1.9.5。 – Metrics

回答

1

您可以尝试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 
+1

啊,我只是想避免使用'names(dti)'......但是我错过了使用':= NULL'的解决方案,实际上我可以使用'copy()'来转义修改原始表,如下所示: 'dti1 < - copy(dti)[,(colsExcl):= NULL]'。谢谢你的解决方案! –