Я хочу создать матрицу смежности. Матрица должна показывать, сколько одинаковых Value-строк на ключевое слово.
Мой текущий подход с двумя циклами for занимает некоторое время при работе с большим количеством данных. Я изучил пакет foreach, но не смог разобраться с этим примером. Буду признателен за помощь при любом увеличении скорости;)
#create reproducible dataset
set.seed(11)
x <- rep('keyword', 10)
y <- seq(1, 10)
z <- rep('value', 10)
df <- tibble::tibble(Keyword = rep(paste0(x,y),4),
Values = paste0(sample(z, 40, replace = TRUE),
sample(y, 40, replace = TRUE)))
#format dataset
temp_df <- df %>%
dplyr::group_by(Keyword) %>%
dplyr::summarise(Values = toString(Values)) %>%
dplyr::ungroup() %>%
dplyr::distinct(Keyword, .keep_all = TRUE)
#initialise adjacency matrix
adj_matrix <- data.frame()
#for loops to iterate through values
for (i in 1:nrow(temp_df)) {
y <- trimws(unlist(strsplit(temp_df$Values[i], split = ',')))
for (g in i:nrow(temp_df)) {
f <- trimws(unlist(strsplit(temp_df$Values[0+g], split = ',')))
z <- y %in% f
adj_matrix[i,g] <- sum(z)
}
}
#name rows and columns
colnames(adj_matrix) <- temp_df$Keyword
rownames(adj_matrix) <- temp_df$Keyword
adj_matrix является разреженным (т. Е. Заполнена только половина), и вы можете видеть, какое ключевое слово имеет общее количество идентичных строк-значений. С помощью этой матрицы я могу легко отобразить отношения на диаграмме сети.
Заранее спасибо!
Ян