2016-06-06 8 views
8

Ich versuche, ein Objekt mit dem Spaltennamen, um die Ausbreitung Funktion zu übergeben, sondern den Wert des Lesens innerhalb des Objekts gerade versucht es, den Objektnamen zu verwenden, selbstVorbei an R einen Spaltennamen tidyr zu verbreiten

Hier nur ein Spielzeug Beispiel

library(tidyr) 
d = (1:4) 
n = c("a"," a", "b","b") 
s = c(1, 2,5,7) 

df = data.frame(d,n, s) 

Value <- n 
data_wide <- spread(df, Value , s) 

Error: Key column 'Value' does not exist in input.

während unten funktioniert:

data_wide <- spread(df, n, s) 
d a a b 
1 1 NA 1 NA 
2 2 2 NA NA 
3 3 NA NA 5 
4 4 NA NA 7 
+0

War dieser Raum in 2. "a" absichtlich? 'n = c (" a "," a "," b "," b ")" – zx8754

Antwort

12

Wirverwenden könnenVariablennamen als Strings weitergeben müssen:

library(tidyr) 
# dummy data 
df1 <- data.frame(d = (1:4), 
        n = c("a", "a", "b", "b") , 
        s = c(1, 2, 5, 7)) 

myKey <- "n" 
myValue <- "s" 
spread_(data = df1, key_col = myKey , value_col = myValue) 
3

data.table

library(data.table) 
dcast(setDT(df), eval(as.name(myValue))~ eval(as.name(myKey)), value.var=myValue) 

In Bezug auf Weitergabe Namen in tidyr Funktionen verwenden, könnte dies answer auch helfen (was ein paar Stunden wieder gebucht wurde).