簡體   English   中英

使用 R 通過不同的行和列交叉鏈接值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM