2015-06-30 9 views
5

Funkcja spreadu tidyr przyjmuje tylko nazwy kolumn bez cudzysłowów. Czy istnieje sposób mogę przekazać w zmiennej, która zawiera nazwę kolumny dla npW jaki sposób funkcja rozprzestrzeniania tidyr może przyjmować zmienną jako wybrana kolumna

# example using gather() 
library("tidyr") 
dummy.data <- data.frame("a" = letters[1:25], "B" = LETTERS[1:5], "x" = c(1:25)) 
dummy.data 
var = "x" 
dummy.data %>% gather(key, value, var) 

To daje błąd

Error: All select() inputs must resolve to integer column positions. 
The following do not: 
* var 

co jest rozwiązywane za pomocą funkcji dopasowania, która daje wymaganą kolumna pozycję

dummy.data %>% gather(key, value, match(var, names(.))) 

Ale to samo podejście nie działa w przypadku funkcji rozprzestrzeniania się

dummy.data %>% spread(a, match(var, names(.))) 
Error: Invalid column specification 

Funkcje gromadzenia i rozprzestrzeniania mają różne specyfikacje kolumn. zbierać zajmuje indeks kolumny natomiast spread nie wspomina, co chce

+0

zauważ, że spread akceptuje tylko jedną kolumnę wartości. Jeśli chcesz rozłożyć wiele kolumn, powinieneś zmutować (wkleić) je w jeden, a następnie rozsunąć. – dalloliogm

+4

Może chcesz 'spread_'? Bierze jednak ciągi znaków zarówno dla kolumny klucza, jak i wartości. – aosmith

Odpowiedz

1

Jeśli chcesz użyć standardowej oceny trzeba użyć gather_ lub spread_

Są 2 dają takie same wyniki

dummy.data %>% gather_("key", "value", var) 
dummy.data %>% gather(key, value, match(var, names(.))) 

I to działa:

dummy.data %>% spread_("a",var) 
# B a b c d e f g h i j k l m n o p q r s t u v w x y 
# 1 A 1 NA NA NA NA 6 NA NA NA NA 11 NA NA NA NA 16 NA NA NA NA 21 NA NA NA NA 
# 2 B NA 2 NA NA NA NA 7 NA NA NA NA 12 NA NA NA NA 17 NA NA NA NA 22 NA NA NA 
# 3 C NA NA 3 NA NA NA NA 8 NA NA NA NA 13 NA NA NA NA 18 NA NA NA NA 23 NA NA 
# 4 D NA NA NA 4 NA NA NA NA 9 NA NA NA NA 14 NA NA NA NA 19 NA NA NA NA 24 NA 
# 5 E NA NA NA NA 5 NA NA NA NA 10 NA NA NA NA 15 NA NA NA NA 20 NA NA NA NA 25 
Powiązane problemy