首页 > 解决方案 > 基于公共值聚合多行

问题描述

我有一个像下面这样的数据集

  W X Y Z
  A 2 3 4
  A 2 3 6
  B 1 2 3
  C 3 2 1
  B 1 3 4
  B 1 2 2

只有当 W、X、Y 列中的值相似时,我才想合并/折叠 Z 列中的值。

最终的数据集将是这样的。

  W X Y Z
  A 2 3 4,6
  B 1 2 3,2
  C 3 2 1
  B 1 3 4

不知道如何做到这一点,任何建议都非常感谢。

标签: raggregateuniquecollapse

解决方案


我们可以按“W”、“X”、“Y”和paste“Z”的值(toStringpaste(..., collapse=", "))分组

library(dplyr)
df1 %>%
   group_by(W, X, Y) %>%
   summarise(Z = toString(unique(Z)))
# A tibble: 4 x 4
# Groups:   W, X [3]
#  W         X     Y Z    
#  <chr> <int> <int> <chr>
#1 A         2     3 4, 6 
#2 B         1     2 3, 2 
#3 B         1     3 4    
#4 C         3     2 1    

aggregatebase R

aggregate(Z ~ ., unique(df1), toString)
#  W X Y    Z
#1 B 1 2 3, 2
#2 C 3 2    1
#3 B 1 3    4
#4 A 2 3 4, 6

数据

df1 <- structure(list(W = c("A", "A", "B", "C", "B", "B"), X = c(2L, 
2L, 1L, 3L, 1L, 1L), Y = c(3L, 3L, 2L, 2L, 3L, 2L), Z = c(4L, 
6L, 3L, 1L, 4L, 2L)), class = "data.frame", row.names = c(NA, 
-6L))

推荐阅读