2015-06-10 5 views
5

Воспроизводимого примера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 много причуд; это один из них? Я бы изменил свои имена переменных, чтобы избавиться от пробелов, но я бы предпочел не делать этого, если мне это не нужно. Я также прочитал предыдущие вопросы, касающиеся только имен столбцов, - и я понимаю, что в течение двух лет с тех пор, как этот последний вопрос обновил его, это можно увидеть легко, когда colname не имеет пробелов.

+0

Я чувствую необходимость добавить, что приклеивание к именам с пробелами просто кажется упрямым. это будет всего лишь неприятностью. три возможных варианта: 'petal_length',' petal.length' и 'petalLength' – MichaelChirico

ответ

13

Просто используйте with = FALSE, как объяснено в рамках data.table FAQ пунктов 1.1-1.3 и 2,17:

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. 
+0

извините за несколько изменений ... – Arun

+3

совсем наоборот, очень рад этому, выглядит теперь более чистым и более информативным! В любом случае я хотел отредактировать обратные записи, а [[часть для меня даже новая! поэтому я узнал что-то новое – grrgrrbla

+0

Спасибо за это. Не знал FAQ. Приветствия. –

Смежные вопросы