Search code examples
rtidyspread

Passing a column name to R tidyr spread


I am trying to pass an object with the column name to the spread function, but instead of reading the value inside the object it just tries to use the object name itself

Here just a toy example

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.

whilst below works fine:

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

Solution

  • We can use spread_() to pass variable names as strings:

    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)