gpt4 book ai didi

r - 跨共享公共(public)列分配 groupid

转载 作者:行者123 更新时间:2023-12-01 22:39:09 24 4
gpt4 key购买 nike

我有以下 data.frame(实际上它有数百万条记录)。

当电话号码与任何其他记录和任何电话号码位置相匹配时,我希望能够分配一个 group_id

id <- c(1:5)
phone_1 <- c("444","", "333", "222", "")
phone_2 <- c("", "444", "111", "", "")
phone_3 <- c("222","", "", "", "111")
df <- data.frame(id, phone_1, phone_2, phone_3)

输出将是:

print(df)
# id phone_1 phone_2 phone_3 group_id
# 1 1 444 222 1
# 2 2 444 1
# 3 3 333 111 2
# 4 4 222 1
# 5 5 111 2

请注意,缺失值(""NA)应被视为不可比较(或者以上所有值都位于同一组中)。

最佳答案

这是查找图形组件的解决方案:

library(tidyr)
library(dplyr)
library(igraph)

df$id <- paste0("id-", df$id)

graph <-
df %>%
gather(dummy, phone, -id) %>%
select(-dummy) %>%
filter(!is.na(phone) & phone != "") %>%
as.matrix() %>%
graph_from_edgelist(directed = FALSE)

plot(graph)

enter image description here

df$ID <- components(graph)$membership[df$id]

df

# id phone_1 phone_2 phone_3 ID
# 1 id-1 444 222 1
# 2 id-2 444 1
# 3 id-3 333 111 2
# 4 id-4 222 1
# 5 id-5 111 2

关于r - 跨共享公共(public)列分配 groupid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53799030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com