4

我将 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)

经过一些调试后,我意识到错误发生在 melt measure.vars 部分,但我不知道如何让它与 ':' 一起工作......请提供解决方案并解释一下,以便我了解更多信息.

4

1 回答 1

4

您要在单独的列 ID 上gather_查找列而不是列。'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="_")

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

于 2014-10-17T17:39:35.037 回答