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.
可重现的例子
#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.