【问题标题】:Group by a variable and merge row data from another column [duplicate]按变量分组并合并另一列中的行数据[重复]
【发布时间】:2016-04-04 20:16:57
【问题描述】:

我想将我的数据按一列分组,并将另一列中的字符串粘贴到一行中。假设,例如,我有一个data.frameA

library(dplyr)
A <- data.frame(student = rep(c("John Smith", "Jane Smith"), 3),
                variable1 = rep(c("Var1", "Var1", "Var2"), 2))
    A <- arrange(A, student)

     student variable1
1 Jane Smith      Var1
2 Jane Smith      Var1
3 Jane Smith      Var2
4 John Smith      Var1
5 John Smith      Var2
6 John Smith      Var1

但是,我需要将data.frame A 转换为data.frame B,按student 变量分组,并将variable1 的任何变体粘贴在一起:

B <- data.frame(student = c("John Smith", "Jane Smith"), 
                variable1 = c(paste("Var1", "Var2", sep = ","),     
                              paste("Var1", "Var2", sep = ",")))

     student variable1
1 John Smith Var1,Var2
2 Jane Smith Var1,Var2

我尝试了 dplyr 包中的大量 group_bymutate 子句,但都没有成功。

【问题讨论】:

    标签: r merge grouping dplyr rows


    【解决方案1】:

    我相信您可以使用聚合函数来做您正在寻找的事情。 这是你想要做的吗?

    df=unique(A)
    agg=aggregate(df$variable1, list(df$student), paste, collapse=",")
    
    > agg
                 Group.1         x
            1 Jane Smith Var1,Var2
            2 John Smith Var1,Var2
    

    【讨论】:

    • 或者只是aggregate(variable1 ~ student, unique(A), toString)
    • 很好的解决方案!谢谢大家。
    【解决方案2】:

    如果您将 student 设置为 key,您可以使用 data.table 包轻松快速地完成此操作:

    library(data.table)
    A<-data.table(A)
    setkey(A, student)
    B<-A[, paste(unique(variable1), collapse=", "),by=student]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2011-12-15
      • 2018-05-11
      相关资源
      最近更新 更多