2017-08-03 39 views
2

分組我有一個包含兩個變量的數據幀,這樣一個變量的所有值的列表:創建由另一個變量中的R

df <- data.frame(group=c(1,1,1,2,2,3,3,4), 
        type=c("a","b","a", "b", "c", "c","b","a")) 

> df 
    group type 
1  1 a 
2  1 b 
3  1 a 
4  2 b 
5  2 c 
6  3 c 
7  3 b 
8  4 a 

欲產生表示每個組的組合的表它在數據框中的類型是一個變量,例如

group alltypes 
1  1  a, b 
2  2  b, c 
3  3  b, c 
4  4  a 

輸出將總是列出的相同順序的類型(例如組2和3得到同樣的結果),並就沒有重複(例如組1不爲「A,B,A」)。

我試着這樣做使用dplyr和總結,但我不知道如何得到它符合這兩個條件 - 我試過的代碼是:

> df %>% 
+ group_by(group) %>% 
+ summarise(
+  alltypes = paste(type, collapse=", ") 
+ ) 
# A tibble: 4 × 2 
    group alltypes 
    <dbl> <chr> 
1  1 a, b, a 
2  2  b, c 
3  3  c, b 
4  4  a 

我也試着轉向型成一套個人計數,但不知道這是否真的有用:

> df %>% 
+ group_by(group, type) %>% 
+ tally %>% 
+ spread(type, n, fill=0) 
Source: local data frame [4 x 4] 
Groups: group [4] 

    group  a  b  c 
* <dbl> <dbl> <dbl> <dbl> 
1  1  2  1  0 
2  2  0  1  1 
3  3  0  1  1 
4  4  1  0  0 

任何建議將不勝感激。

+1

嘗試添加排序(唯一的(類型))至糊狀打電話給你第一個方案 – www

+0

這次看起來這不是問題,但爲了將來的參考,請包括創建數據集的代碼(如我添加的內容),並省略'>'和'+'控制檯字符,以便有人可以複製並粘貼您的示例代碼來運行它。 –

回答

1

我覺得你非常接近。你可以把sortunique功能,以確保您的結果符合您的條件如下:

df %>% group_by(group) %>% 
summarize(type = paste(sort(unique(type)),collapse=", ")) 

回報:

# A tibble: 4 x 2 
    group type 
    <int> <chr> 
1  1 a, b 
2  2 b, c 
3  3 b, c 
4  4  a 
相關問題