提问人:sparklink 提问时间:9/7/2023 更新时间:9/7/2023 访问量:69
在 R 中链接具有记录扩展的记录 [duplicate]
Linking records with record expansion in R [duplicate]
问:
我有一个大数据帧,看起来像这样:
编号 | x |
---|---|
1 | 123 |
2 | 123 |
2 | 125 |
3 | 125 |
4 | 200 |
tibble(id = c(1, 2, 2, 3, 4),
x = c(123, 123, 125, 125, 200))
我想链接我的记录并扩展它们。也就是说,如果它们具有相同的 ID,它们应该具有相同的 ID。请注意,记录 2 和 3 被视为同一实体,因为它们与 1 共享链接。换言之,如果没有记录 1,则记录 2 和 3 将不会链接。我还想给它记录链接的最小值。x
id
id
id
结果应如下所示:
编号 | x |
---|---|
1 | 123 |
1 | 123 |
1 | 125 |
1 | 125 |
4 | 200 |
答:
4赞
Allan Cameron
9/7/2023
#1
重述这个问题的等效方法是“如果数据帧表示有向图的'to'和'from'节点,那么图的每个唯一组件的第一个ID是什么?
我们可以用图形方式显示这一点:
library(igraph)
library(tidyverse)
df <- tibble(id = c(1, 2, 2, 3, 4),
x = c(123, 123, 125, 125, 200))
g <- graph_from_data_frame(df)
如果我们绘制图形,我们将看到有两个未连接的节点集群(称为组件);一个用于分组 ID 1:3,一个用于 ID 4:
plot(g)
我们可以使用该函数来计算每个 ID 属于哪个组,并获取每个组中的 ID:components
first
comp <- components(g)$membership
df %>%
mutate(group = comp[match(id, names(comp))]) %>%
mutate(id = first(id), .by = 'group') %>%
select(-group)
#> # A tibble: 5 x 2
#> id x
#> <dbl> <dbl>
#> 1 1 123
#> 2 1 123
#> 3 1 125
#> 4 1 125
#> 5 4 200
创建于 2023-09-07 使用 reprex v2.0.2
评论