9

列名を持つオブジェクトをスプレッド関数に渡そうとしていますが、オブジェクト内の値を読み取る代わりに、オブジェクト名自体を使用しようとしています

ここにおもちゃの例があります

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)

エラー: キー列 'Value' が入力に存在しません。

以下は正常に動作しますが:

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
4

3 に答える 3

13

spread_()変数名を文字列として渡すために使用できます。

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)
于 2016-06-06T11:22:22.393 に答える
3

使用するdata.table

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

関数で名前を渡すことに関してはtidyr、この回答も役立ちます(数時間前に投稿されました)。

于 2016-06-06T11:26:37.350 に答える