使用dplyr连接组中的所有行 [英] Concatenating all rows within a group using dplyr

查看:175
本文介绍了使用dplyr连接组中的所有行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个这样的数据框:

  hand_id card_id card_name card_class 
A 1 p alpha
A 2 q beta
A 3 r theta
B 2 q beta
B 3 r theta
B 4 s gamma
C 1 p alpha
C我想把card_id,card_name和card_class连接成一个单独的一行,每个手号A级,B级,C级,所以结果将如下所示:

  hand_id combo_1 combo_2 combo_3 
A 1 -2-3 pqr alpha-β-θ
B 2-3-4 qrs beta-θ-gamma
....

我尝试使用group_by和mutate来执行此操作,但我似乎无法使其正常工作

  data<  -  read_csv('data.csv')
byHand< - group_by(data,hand_id )%>%
mutate(combo_1 = paste(card_id),
combo_2 = paste(card_name),
combo_3 = paste(card_class))

感谢您的帮助。

解决方案

你很亲近!

 code> library(tidyr)
library(dplyr)

data< - read_csv('data.csv')
byHand< - group_by(data,hand_id )%>%
summaryize(combo_1 = paste(card_id,collapse = - ),
combo_2 = paste(card_name,collapse = - ),
combo_3 = ,collapse = - ))

或使用 summarise_each

  byHand<  -  group_by(data,hand_id)%>%
summarise_each(funs粘贴(。,collapse = - )))


Suppose I have a dataframe like this:

hand_id card_id card_name card_class
A       1       p          alpha
A       2       q          beta
A       3       r          theta
B       2       q          beta
B       3       r          theta
B       4       s          gamma
C       1       p          alpha
C       2       q          beta 

I would like to concatenate the card_id, card_name, and card_class into one single row per hand level A, B, C. So the result would look something like this:

hand_id  combo_1  combo_2  combo_3
A        1-2-3    p-q-r    alpha-beta-theta
B        2-3-4    q-r-s    beta-theta-gamma
....

I attempted to do this using group_by and mutate, but I can't seem to get it to work

    data <- read_csv('data.csv')
    byHand <- group_by(data, hand_id) %>%
      mutate(combo_1 = paste(card_id), 
             combo_2 = paste(card_name),
             combo_3 = paste(card_class))

Thank you for your help.

解决方案

You were kind of close!

library(tidyr)
library(dplyr)

data <- read_csv('data.csv')
byHand <- group_by(data, hand_id) %>%
    summarise(combo_1 = paste(card_id, collapse = "-"), 
              combo_2 = paste(card_name, collapse = "-"),
              combo_3 = paste(card_class, collapse = "-"))

or using summarise_each:

 byHand <- group_by(data, hand_id) %>%
        summarise_each(funs(paste(., collapse = "-")))

这篇关于使用dplyr连接组中的所有行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆