2016-07-28 93 views
0

有時一個擁有多項具有相同分組變量,特別是對一些變量做gather,恩結果:dplyr GROUP_BY大量的變量

x0  x1 x2 variable  value 
1 1 Male Green  1 0.1803306 
2 1 Male Green  2 0.5619410 
3 1 Male Green  3 0.9905186 
4 2 Female Blue  1 0.1549419 
5 2 Female Blue  2 0.6917326 
6 2 Female Blue  3 0.6509738 

在這種情況下,我我想計算一個分組彙總統計量(例如,group_by(x0) %>% summarize(sum(value))),同時保留第一列給出的所有ID變量。一種方法是做group_by(x0, x1, x2),但是如果有大量的ID變量,並且group_by似乎不適用於select的函數,所以我不能這樣做group_by(starts_with("x"))。我怎樣才能完整地保留我所有的ID變量後總結,而無需單獨輸入每個變量名稱?

+0

請顯示您所需的輸出。我不明白 – Frank

+2

哦,我想我明白你在說什麼,在這種情況下,你真正的問題是你的數據存儲不好。嘗試閱讀dplyr作者關於「整理數據」的建議https://www.jstatsoft.org/article/view/v059i10 – Frank

回答

2

不一樣乾淨dplyr內置的解決方案,我們仍然可以有一些變通使用grepgroup_by_功能,其中.dots參數允許我們通過字符的矢量名稱:

df %>% 
    group_by_(.dots = grep("^x", names(df), value = T)) %>% 
    summarize(s_value = sum(value)) 

# Source: local data frame [2 x 4] 
# Groups: x0, x1 [?] 

#  x0  x1  x2 s_value 
# <int> <fctr> <fctr> <dbl> 
#1  1 Male Green 1.732790 
#2  2 Female Blue 1.497648 

grep("^x", ...)將採取行動與starts_with相同,只不過我們需要手動傳遞數據幀的名稱並指定value參數爲TRUE,以便它將返回x0, x1, x2的向量,我們可以group_by_