tidyr扩散函数如何将变量作为选择列

时间:2015-06-30 11:04:14

标签: r tidyr

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

收集和传播函数采用不同的列规范。聚集采用列索引,而传播没有提到它想要什么

1 个答案:

答案 0 :(得分:1)

如果您想使用标准评估,则需要使用gather_spread_

这两个结果相同

dummy.data %>% gather_("key", "value", var)
dummy.data %>% gather(key, value, match(var, names(.)))

这有效:

dummy.data %>% spread_("a",var)
#   B  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y
# 1 A  1 NA NA NA NA  6 NA NA NA NA 11 NA NA NA NA 16 NA NA NA NA 21 NA NA NA NA
# 2 B NA  2 NA NA NA NA  7 NA NA NA NA 12 NA NA NA NA 17 NA NA NA NA 22 NA NA NA
# 3 C NA NA  3 NA NA NA NA  8 NA NA NA NA 13 NA NA NA NA 18 NA NA NA NA 23 NA NA
# 4 D NA NA NA  4 NA NA NA NA  9 NA NA NA NA 14 NA NA NA NA 19 NA NA NA NA 24 NA
# 5 E NA NA NA NA  5 NA NA NA NA 10 NA NA NA NA 15 NA NA NA NA 20 NA NA NA NA 25