2015-06-10 8 views
5

powtarzalne przykładdata.table operacje wg nazwy kolumny ze spacjami nie

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

Dostęp kolumnę bez przestrzeń jest dobrze

iris[,Petal.Width] 

jednak dostęp kolumnę których nazwa zawiera spację nie praca

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

Jedynym rozwiązaniem wydaje się być

iris[,iris$'Petal Length'] 

Komentarze Jestem nowy data.table. Rozumiem, że istnieje wiele dziwactw w data.table; czy to jeden z nich? Chciałbym zmienić moje nazwy zmiennych, aby pozbyć się spacji, ale wolałbym tego nie robić, gdybym nie musiał. Czytałem również poprzednie pytania dotyczące tylko nazw kolumn - i rozumiem, że w ciągu dwóch lat od kiedy to ostatnie pytanie pozwoliły na to aktualizacje - widać to z łatwością, gdy colname nie ma spacji.

+0

Czuję potrzebę dodawania, że ​​przyklejanie się do nazw ze spacjami wydaje się być uparte. będzie to tylko uciążliwe. trzy możliwe alternatywy: 'petal_length',' petal.length' oraz 'petalLength' – MichaelChirico

Odpowiedz

13

Wystarczy użyć with = FALSE jak wyjaśniono w data.table FAQ punktów 1.1-1.3 i 2.17:

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

i upewnij się, aby przeczytać doskonała introduction to data.table PDF vignette and the new HTML vignettes.


W tym przypadku, na co można się spodziewać (wektor), stosując [[ jest bardziej odpowiedni:

iris[['Petal Length']] 

Alternatywnie, można także zapoznać się z nazwami kolumn, jak gdyby były zmienne w j:

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

przepraszam za wiele zmian ... – Arun

+3

wręcz przeciwnie, bardzo się cieszę, teraz wygląda czysto czysto i jest bardziej pouczający! I tak chciałem edytować backticks, a [[część jest dla mnie nawet nowa! więc nauczyłem się czegoś nowego – grrgrrbla

+0

Dzięki za to. Nie wiedziałem, że istnieje FAQ. Twoje zdrowie. –