2016-07-24 80 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