2016-07-15 35 views
0

的动态列表我有一个数据帧:如何移调数据框下来的变量R中

store store_name 2016-01-01 2016-01-02 ... 
1  abc   ###   ### 

那我想转下来:

store store_name date   sales 
1  abc   2016-01-01 ### 
1  abc   2016-01-02 ### 

,我很困难存在描述性存储变量的数量可能会有所不同。当它们是静态的,我可以有台阶状转下来:

library(tidyr) 

gather(store_sales, 
     date, 
     sales, 
     -c(store, store_name)) 

但试图解释时有不同的量被证明是非常棘手。所以例如可以是store,store_name和store_name2 - 是否有一种方法可以将变量传递到收集函数中以使语句动态化?

我已经尝试了几件事情,但不能让它的工作

vars <- paste0("store_sales, 
     date, 
     sales, 
     -store, 
     -store_name") 

store_sales_down <- gather(vars) 
+0

所以,你要的是不是一个日期的所有列,对不对? –

+0

是的,所有不是日期的列(它们都是格式为yyyy-mm-dd)我想从变换中排除 –

回答

1

使用gather_功能允许字符串传递:

使数据

d <- data.frame(store = 1, 
       store_name = "abc", 
       "2016-01-01" = 2, 
       "2016-01-02" = 5, 
       "2016-01-03" = 87, 
       check.names = FALSE) 

执行操作:

library(tidyr) 
gather_(d, key_col = c("date"), 
     value_col = "sales", 
     gather_cols= grep("\\d{4}-\\d{2}-\\d{2}", names(d), value = TRUE)) 

store store_name  date sales 
1  1  abc 2016-01-01  2 
2  1  abc 2016-01-02  5 
3  1  abc 2016-01-03 87 

现在有了一个额外的列:

d$storename2 = 3 

gather_(d, key_col = c("date"), 
     value_col = "sales", 
     gather_cols= grep("\\d{4}-\\d{2}-\\d{2}", names(d), value = TRUE)) 

    store store_name storename2  date sales 
1  1  abc   3 2016-01-01  2 
2  1  abc   3 2016-01-02  5 
3  1  abc   3 2016-01-03 87 
+0

非常感谢您的帮助 –

相关问题