2016-07-24 98 views
1

保留唯一元素我想結合行,刪除dups,但保持唯一。我可以做前兩個,但不是第二個。我有一個名爲DF主題,看起來像這樣:結合重複項並使用dplyr :: distinct

unique_id subject  grade 
1   Math   88 
1   English  78 
1   History  98 
2   Math   65 
2   English  72 
2   History  84 

此代碼

combined <- distinct(subject, unique_id, .keep_all = TRUE) 

給了我這樣的輸出:

unique_id subject  grade 
1    Math   88 
2    Math   65 

我想擁有它看起來就像這樣:

unique_id subject      grade 
1    Math, English, History  88, 78, 98 
2    Math, English, History  65, 72, 84 

下面的解決方案工作完美!這是一個更多的問題皺紋。

如果我有一個數據集,看起來像這樣:

unique_id school subject grade sex 
    1  great Math  88  
    1  great English 78  
    1  great History 98 male 
    2  spring Math  65  
    2  spring English 72 female 
    2  spring History 84  

和運行下面的代碼:

(r2 <- df %>% 
    group_by(unique_id) %>% 
    summarise_each(funs(toString(unique(.))))) 

我得到以下輸出:

unique_id school subject      grade  sex 
    1  great Math, English, History  88,78,98  , male 
    2  spring English, English, History 65,72,84  , female 

有一種將空單元格與性類別中的逗號相結合的方式,所以它可以看起來像這樣:

unique_id school subject      grade  sex 
    1  great Math, English, History  88,78,98  male 
    2  spring English, English, History 65,72,84  female 

謝謝!

回答

2

我們可以通過粘貼做到這一點(toStringpaste(., collapse=", ")包裝)獨特的元素結合在一起爲每列由分組後「UNIQUE_ID」

library(dplyr) 
(r1 <- df %>% 
     group_by(unique_id) %>% 
     summarise_each(funs(toString(unique(.))))) 
# unique_id    subject  grade 
#  <int>     <chr>  <chr> 
#1   1 Math, English, History 88, 78, 98 
#2   2 Math, English, History 65, 72, 84 

或者我們可以把它作爲一個list然後提取list元件

r2 <- df %>% 
     group_by(unique_id) %>% 
     summarise_each(funs(list(unique(.)))) 

從 'R2',我們可以unnest(從tidyr)如果我們需要

library(tidyr) 
r2 %>% 
    unnest() 

如果我們使用的是OP的方式與distinct,我們可以從summarise_each刪除unique

df %>% 
    distinct(subject, unique_id, .keep_all=TRUE) %>% 
    group_by(unique_id) %>% 
    summarise_each(funs(toString(.))) 
+0

謝謝,@akrun!你的第一個選擇完美的作品一個簡單的問題:我嘗試了空白單元格,發現我收到了一些逗號。任何想法如何添加代碼,以避免它計算空白單元格?看到上面的新例子。謝謝!!! – richiepop2

+0

@ richiepop2一個選擇是將其轉換爲NA,並用'is.na'或其他方式刪除它,否則我們可以用'summarise_each(funs(toString(。[nzchar(。)])))' – akrun

+0

我試過你提供的解決方案,但它似乎沒有工作。我正在努力想辦法結合行,但跳過空白。查看上面的新代碼示例。 – richiepop2