首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dplyr::dplyr::dplyr合并并保留唯一元素

使用dplyr::dplyr::dplyr合并并保留唯一元素
EN

Stack Overflow用户
提问于 2016-07-24 03:59:21
回答 1查看 110关注 0票数 1

我想合并行,删除dups,但保留uniques。我可以做前两个,但不能做第二个。我有一个名为subject的df,它看起来像这样:

代码语言:javascript
复制
unique_id   subject     grade
1            Math         88
1            English      78
1            History      98
2            Math         65
2            English      72
2            History      84

这段代码

代码语言:javascript
复制
combined <- distinct(subject, unique_id, .keep_all = TRUE)

给我这个输出:

代码语言:javascript
复制
   unique_id    subject     grade
1               Math          88
2               Math          65

我想让它看起来像这样:

代码语言:javascript
复制
   unique_id    subject                       grade
1               Math, English, History        88, 78, 98
2               Math, English, History        65, 72, 84

下面的解决方案非常有效!这是这个问题的另一个问题。

如果我有这样的数据集:

代码语言:javascript
复制
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    

并运行以下代码:

代码语言:javascript
复制
(r2 <- df %>%
  group_by(unique_id) %>% 
  summarise_each(funs(toString(unique(.)))))

我得到以下输出:

代码语言:javascript
复制
unique_id   school  subject                     grade       sex
    1       great   Math, English, History      88,78,98     , male 
    2       spring  English, English, History   65,72,84     , female

是否有一种方法可以将空单元格合并,去掉性别类别中的逗号,所以它可以如下所示:

代码语言:javascript
复制
unique_id   school  subject                     grade       sex
    1       great   Math, English, History      88,78,98     male   
    2       spring  English, English, History   65,72,84     female

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-24 04:01:02

我们可以通过粘贴(toStringpaste(., collapse=", ")的包装器)来实现这一点,在按'unique_id‘分组后,每个列的唯一元素在一起。

代码语言:javascript
复制
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元素。

代码语言:javascript
复制
r2 <- df %>% 
       group_by(unique_id) %>% 
       summarise_each(funs(list(unique(.))))

从'r2',我们可以unnest (从tidyr),如果我们需要

代码语言:javascript
复制
library(tidyr)
r2 %>%
  unnest()

如果我们在distinct中使用OP的方式,我们可以从summarise_each中删除unique

代码语言:javascript
复制
df %>%
   distinct(subject, unique_id, .keep_all=TRUE) %>%
   group_by(unique_id) %>%
   summarise_each(funs(toString(.)))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38548613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档