2016-06-06 12 views
8

próbuję przekazać obiekt z nazwą kolumny do funkcji spread, ale zamiast czytać wartość wewnątrz obiektu po prostu stara się wykorzystać nazwę obiektu samąPrzechodząc nazwę kolumny do R tidyr rozprzestrzeniać

Tutaj tylko przykład zabawka

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.

natomiast poniżej działa dobrze:

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

Czy to miejsce w drugim "a" zamierzonym? 'n = c (" a "," a "," b "," b ")' – zx8754

Odpowiedz

12

Możemy użyć spread_() przekazać nazwy zmiennych jako ciągi:

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

Korzystanie data.table

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

Odnośnie nazwy przekazując tidyr funkcji, to może również pomóc answer (który został opublikowany kilka godzin do tyłu).

Powiązane problemy