2016-07-15 38 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

非常感謝您的幫助 –

相關問題