我将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;那里...
请帮助解决方案并解释一下,以便我了解更多信息。
答案 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="_")
您需要查看所需的列名并制作相应的矢量。