将列名传递给R tidyr spread

use*_*882 9 r tidy spread

我试图将具有列名称的对象传递给spread函数,但是它不是读取对象内部的值而只是尝试使用对象名称本身

这里只是一个玩具示例

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)
Run Code Online (Sandbox Code Playgroud)

错误:输入中不存在键列"值".

虽然下面工作正常:

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
Run Code Online (Sandbox Code Playgroud)

zx8*_*754 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)
Run Code Online (Sandbox Code Playgroud)