【发布时间】:2019-12-01 00:25:52
【问题描述】:
我有一个要根据列中的值进行分组的数据框。
诀窍是,如果值已经出现在我分组依据的列中,则需要合并一些行。
例如:
df <- data.frame(col1 = c("R1", "R2", "R2", "R2", "R2", "R4", "R5", "R5", "R5"),
col2 = c("R10", "R4", "R5", "R6", "R7", "R5", "R6", "R7", "R9"), stringsAsFactors = FALSE)
df2 <- aggregate(col2 ~ col1, df, FUN = function(x) paste(unique(x), collapse = ", "))
> df
col1 col2
1 R1 R10
2 R2 R4
3 R2 R5
4 R2 R6
5 R2 R7
6 R4 R5
7 R5 R6
8 R5 R7
9 R5 R9
> df2
col1 col2
1 R1 R10
2 R2 R4, R5, R6, R7
3 R4 R5
4 R5 R6, R7, R9
R10 将在 R1 组(第 1 行)中
R4、R5、R6 和 R7 将在 R2 组中(第 2 到 5 行) R5 将在 R4 组(第 6 行)
R6、R7 和 R9 将属于 R5 组(行:7 到 9)
但是 R4 和 R5 已经在 R2 中,所以它会留在 R2 中。 对于原本分配给R5的R9,需要归入R2。
所以期望的结果是:
> df3
col1 col2
1 R1 R10
2 R2 R4, R5, R6, R7, R9
或者最好:
1 col1 col2
2 R1 R10
3 R2 R4
4 R2 R5
5 R2 R6
6 R2 R7
7 R2 R9
【问题讨论】:
-
For R9 which is originally assigned to R5, needs to be grouped in to R2.为什么?怎么样? -
因为 R5 包含在 R2 中。如果你看
df2col2R5 映射到 R2。 -
查看 igraph 包 - 如果您可以灵活处理输出,这本质上是一个集群问题。例如:
library(igraph); g <- graph.data.frame(df); clusters(g) -
哇,
igraph包太棒了。谢谢!
标签: r dplyr data.table