【发布时间】:2016-08-05 18:43:29
【问题描述】:
我有一个字母数字 ID 和相关值的表。有一个 ID 与多个值关联的实例。另一方面,也有给定值对应多个 ID 的实例。我试图以这样一种方式折叠表格,即每个 ID 和每个值只列出一次。我发现了一些接近但不完全相同的问题,例如R finding duplicates in one column and collapsing in a second column,或aggregate values from several fields into one
这是我的数据的示例:
library(data.table)
ID = c("c067","c155","l413","l413","k456","z025","z026","z025","z026")
value = c(47, 47, 57, 58, "vwd", 85, 85, "ca", "ca")
x.raw = data.table(ID, value)
我可以通过这样做得到部分解决方案:
x.tidy1 = x.raw[,list(value = list(value)), by = ID]
但是,请注意值 "47" 和 "c("85", "ca")" 分别出现两次。我真正想要的是在最后得到类似的东西:
ID = list(c("c067","c155"),"l413","k456",c("z025","z026"))
value = list("47",c("57","58"),"vwd",c("85","ca"))
x.tidy2 = data.table(ID, value)
# ID value
# 1: c067,c155 47
# 2: l413 57,58
# 3: k456 vwd
# 4: z025,z026 85,ca
我试过了,没有成功:
x.tidy2 = x.tidy1[,list(ID = list(ID)), by = value]
我该怎么做?
【问题讨论】:
-
您是否折叠表格以进行进一步分析?如果是这样,您可能不希望有列表列,因为它们很难使用。如果您只是想查找图表的连接组件,或者将它们可视化,那非常简单。
-
@Frank 是的,我打算进一步分析数据。我不想使用列表,但我想不出另一种存储聚合的方法。
-
Igraph 有很多算法可以处理这样的数据。 igraph.org/r/doc 如果您将其保存在图表中而不是摆弄列表列,那么您很可能可以进行所需的分析。无论如何,这是我的猜测。
-
我明白了。我不熟悉这个包,但我会检查一下。谢谢。
标签: r duplicates data.table aggregate