可重现的示例
#Use the Iris data set
library(data.table)
iris
colnames(iris)[3] <- "Petal Length"
iris <- as.data.table(iris)
在没有空间的情况下访问列是可以的
iris[,Petal.Width]
但是访问名称包含空格的列不起作用
iris[,Petal Length]
iris[,'Petal Length']
唯一的解决方案似乎是
iris[,iris$'Petal Length']
评论
我是data.table的新手。我了解到data.table中有很多奇怪之处;是其中之一吗?我会更改变量名以除去空格,但是如果不需要,我不希望这样做。我还阅读了有关列名称的先前问题-从上次问题更新允许以来,我已经了解了两年-当姓氏没有空格时,可以很容易地看到这一点。
最佳答案
更新2020-04-22data.table
已经发展了,现在iris[ , 'Petal.Length']
将返回一个单列表(即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.
关于r - 带有空格的列名进行的data.table操作失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30757316/