[英]Crosslink values through different rows and columns with R
我有兩列配對 ID,如下所示:
id_a=c(12,15,68663,34,34,34,20,1001)
id_b<-c(67764,68663,68667,14,19,1001,20,2112)
input=data.frame(id_a,id_b)
我正在努力做的是交叉鏈接配對值,所以預期的 output 看起來像這樣:
output=data.frame(id_linked_1=c(12,14,15,20),id_linked_2=c(67764,19,68663,20),id_linked_3=c(NA,34,68667,NA),id_linked_4=c(NA,1001,NA,NA),id_linked_5=c(NA,2112,NA,NA))
任何建議都非常感謝。
我在這里發布了https://stackoverflow.com/users/8245406/rui-barradas提出的解決方案。
library(igraph)
g <- graph_from_data_frame(input)
plot(g, vertex.size = 30, vertex.color = 'lightgrey', edge.arrow.width = 0.5)
v_num <- unique(match(input[[1]], names(V(g))))
path_list <- mapply(subcomponent, list(g), v_num)
names(path_list) <- v_num
path_list2 <- lapply(path_list, function(p){
p <- unlist(p, recursive = FALSE)
stringr::str_sort(unique(names(p)), numeric = TRUE)
})
final <- lapply(seq_along(path_list2), function(i){
keep <- sapply(seq_along(path_list2)[-seq_len(i)], function(j){
length(intersect(path_list2[[i]], path_list2[[j]])) == 0
})
if(all(keep)) path_list2[[i]] else NULL
})
final <- final[lengths(final) > 0]
sapply(final, paste, collapse = "//")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.