2015-06-30 8 views
5

tidyrs Spread-Funktion nimmt nur Spaltennamen ohne Anführungszeichen. Gibt es eine Weise, die ich in einer Variable übergeben kann, die die Spaltennamen für zB enthältWie kann tidyr spread Funktion nehmen Variable als eine Spalte auswählen

# 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) 

dies einen Fehler

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

gibt, die gelöst wird mit Match-Funktion, die der erforderlichen Spaltenposition gibt

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

Aber dieser gleiche Ansatz für die Bildfunktion nicht funktioniert

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

Sammeln und verteilen Funktionen nehmen unterschiedliche Spaltenspezifikation. sammeln nimmt einen Spaltenindex, während Verbreitung nicht erwähnt, was es

+0

Beachten Sie, dass Spread nur eine Wertespalte akzeptiert. Wenn Sie mehrere Spalten verteilen möchten, sollten Sie sie zu einem einzigen mutieren (und einfügen) und anschließend verteilen. – dalloliogm

+4

Vielleicht möchten Sie 'Spread_'? Es werden jedoch Zeichenfolgen für die Spalten key und value verwendet. – aosmith

Antwort

1

will Wenn Sie Standard-Auswertung verwenden möchten, müssen Sie gather_ oder spread_

Diese 2 geben die gleichen Ergebnisse

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

verwenden und das funktioniert:

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 
Verwandte Themen