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
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)
Using data.table
library(data.table)
dcast(setDT(df), eval(as.name(myValue))~ eval(as.name(myKey)), value.var=myValue)
Regarding passing names in tidyr
functions, this answer could also help (which was posted a couple of hours back).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With