【发布时间】:2015-09-17 03:32:21
【问题描述】:
tidyr 的扩展函数只接受不带引号的列名。有没有办法可以传入包含列名的变量 例如
# example using gather()
library("tidyr")
dummy.data <- data.frame("a" = letters[1:25], "B" = LETTERS[1:5], "x" = c(1:25))
dummy.data
var = "x"
dummy.data %>% gather(key, value, var)
这会报错
Error: All select() inputs must resolve to integer column positions.
The following do not:
* var
使用匹配函数解决,该函数给出所需的列位置
dummy.data %>% gather(key, value, match(var, names(.)))
但同样的方法不适用于扩展函数
dummy.data %>% spread(a, match(var, names(.)))
Error: Invalid column specification
收集和传播函数采用不同的列规范。 collect 需要一个列索引,而 spread 没有提到它想要什么
【问题讨论】:
-
注意spread 只接受一个值列。如果你想传播多列,你应该将它们变异(粘贴)成一个,然后再传播。
-
也许你想要
spread_?不过,它需要字符串作为键和值列。