Итак, у меня массивный фрейм данных, и я пытаюсь объединить оценки, рассчитанные по нескольким фреймам данных (около 17 фреймов), с этим одним фреймом данных, и мне нужно выполнить этот процесс 12 раз. Это примерный фрейм данных, который у меня есть
df=structure(list(ï..id = structure(c(2L, 7L, 5L, 4L, 3L, 1L, 6L,
8L), .Label = c("B12", "B7", "C2", "C9", "D3", "E2", "E6", "R4"
), class = "factor"), age = c(42L, 45L, 83L, 59L, 49L, 46L, 52L,
23L)), class = "data.frame", row.names = c(NA, -8L))
Так что мне нужно рассчитать сетевые метрики, используя пакет igraph
. Вот 2 матрицы у меня с разными людьми в них
net_mat1=structure(c("B7", "E6", "D3", "C9"), .Dim = c(2L, 2L), .Dimnames = list(
NULL, c("ï..target", "partner")))
net_mat2=structure(c("C2", "B12", "E2", "R4"), .Dim = c(2L, 2L), .Dimnames = list(
NULL, c("ï..target", "partner")))
Вот что я вычисляю
library(igraph)
g1=graph_from_edgelist(net_mat1)
g2=graph_from_edgelist(net_mat2)
degree_cent_close_1=centr_degree(g1, mode = "all")
degree.cent_close_1 #create object that contains metrics
degree.cent_close2=centr_degree(g2, mode = "all")
degree.cent_close2 #create another object that contains metrics
Затем я создаю кадры данных, которые содержат метрики, которые я вычислил
cent_score_df1=data.frame(degree_cent_close_1$res, V(g1)$name)
cent_score_df1
cent_score_df2=data.frame(degree.cent_close2$res, V(g2)$name)
cent_score_df2
Затем я пытаюсь сопоставить и проиндексировать значения этих метрик обратно в df
фрейм данных, выполняя это
df$centrality_scores <- cent_score_df1[ match(df[['id']], cent_score_df1[['V.g1..name']] ) , 'degree_cent_close_1.res']
df$centrality_scores
df$centrality_scores <- cent_score_df2[ match(df[['id']], cent_score_df2[['V.g2..name']] ) , 'degree.cent_close2.res']
df$centrality_scores
Однако, кажется, что каждый раз, когда я пытаюсь объединить свои данные с исходным кадром данных, он может прикрепить только половину данных. Я никогда не могу прикрепить оба кадра данных. У кого-нибудь есть лучший метод, который работает для повторного присоединения данных? Если есть более быстрые и чистые способы сделать это, я был бы очень признателен за ввод