r - 带有空格的列名进行的data.table操作失败

标签 r data.table

可重现的示例

#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-22
data.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/

相关文章:

从 lapply 返回匿名函数 - 出了什么问题?

r - 从 UTC 时间获取本地时间

reshape 数据(更快的方式)

r - data.table 中的 `by` 和 `.EACHI`

在 data.table 中的两列上滚动一个函数

r - 为什么 `row.names` 优于 `rownames` ?

R - 将时间序列与不同频率对齐

string - 读外国文字

r - SVM奇怪的分类

r - 选择所有列 |基于条件的 data.table 的行