如何在变量中使用gather_ in tidyr

时间:2014-10-17 16:37:12

标签: r melt tidyr

我将tidyr与闪亮一起使用,因此需要在tidyr操作中使用动态值。 但是我在使用gather_()时遇到了麻烦,我认为这是为这种情况设计的。 下面的最小例子:

library(tidyr)

df <- data.frame(name=letters[1:5],v1=1:5,v2=10:14,v3=7:11,stringsAsFactors=FALSE)
#works fine
df %>% gather(Measure,Qty,v1:v3)

dyn_1 <- 'Measure'
dyn_2 <- 'Qty'
dyn_err <- 'v1:v3'
dyn_err_1 <- 'v1'
dyn_err_2 <- 'v2'
#error
df %>% gather_(dyn_1,dyn_2,dyn_err)
#error
df %>% gather_(dyn_1,dyn_2,dyn_err_1:dyn_err_2)
经过一些调试后,我意识到错误发生在融合测量.vars部分,但我不知道如何使用&#39;:&#39;那里... 请帮助解决方案并解释一下,以便我了解更多信息。

1 个答案:

答案 0 :(得分:4)

您告诉gather_不要在单独的列ID上查找colume 'v1:v3'。只需将dyn_err <- "v1:v3"更改为dyn_err <- paste("v", seq(3), sep="")

如果df具有不同的列名称(例如var_a,qtr_b,stg_c),则可以提取这些列名称,也可以使用paste函数来处理感兴趣的变量。

dyn_err <- colnames(df)[2:4]

dyn_err <- paste(c("var", "qtr", "stg"), letters[1:3], sep="_")

您需要查看所需的列名并制作相应的矢量。