根据公共值聚合多行
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' 的值(toString
是 paste(..., 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))
我有一个像下面这样的数据集
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' 的值(toString
是 paste(..., 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))