根据公共值聚合多行

Aggregate multiple rows based on common values

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

  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 列中的值相似时,我才想 combine/collapse Z 列中的值。

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

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

不确定如何操作,非常感谢任何建议。

我们可以按 '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    

aggregate 来自 base 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))