data.table 带空格的列名操作失败

data.table operations by column name with spaces fails

可重现的例子

#Use the Iris data set
library(data.table)
iris 
colnames(iris)[3] <- "Petal Length"
iris <- as.data.table(iris)

无需 space 即可访问列

iris[,Petal.Width]

但是访问名称包含 space 的列不起作用

iris[,Petal Length]
iris[,'Petal Length']

唯一的解决办法似乎是

iris[,iris$'Petal Length']

评论 我是 data.table 的新手。我知道 data.table 中有很多怪癖;这是其中之一吗?我会更改我的变量名以摆脱 spaces,但如果不需要,我宁愿不这样做。我还阅读了一个关于列名的先前问题——我知道自从上一个问题更新允许它以来的两年里——当列名没有 spaces 时,这可以很容易地看出。

更新2020-04-22

data.table 已经发展,现在 iris[ , 'Petal.Length'] 将 return 单列 table(即 j 中的字符和整数文字向量可以是用于列选择)。在扩展 .SDcols 方面也有大量更新,用于常见用例以进行列过滤(按名称模式进行子集化,按逻辑聚合进行子集化);详情见新闻。

下面留给后人。


只需按照 data.table FAQ 点 1.1-1.3 和 2.17 中的说明使用 with = FALSE

iris[ ,'Petal Length', with = FALSE]

并确保阅读优秀的 introduction to data.table PDF vignette and the new HTML vignettes


在这种情况下,对于你所期望的(一个向量),使用[[更合适:

iris[['Petal Length']]

或者,您也可以引用列名,就好像它们是 j 中的变量一样:

iris[, `Petal Length`] # note the backticks.