使用dplyr连接组内的所有行

use*_*618 3 r dplyr tidyr

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

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 
Run Code Online (Sandbox Code Playgroud)

我想将card_id,card_name和card_class连接成每一级A,B,C的单行.所以结果看起来像这样:

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
....
Run Code Online (Sandbox Code Playgroud)

我尝试使用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))
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

zac*_*dav 9

你有点亲密!

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 = "-"))
Run Code Online (Sandbox Code Playgroud)

或使用summarise_each:

 byHand <- group_by(data, hand_id) %>%
        summarise_each(funs(paste(., collapse = "-")))
Run Code Online (Sandbox Code Playgroud)

  • `summarise_each`将被弃用,以支持`summarise_all`,你可以使用类似的或者像`df%>%group_by(hand_id)%>%summarise_all(paste,collapse =' - ')` (2认同)