Проще с matrix
из NA
с, а затем выполнить присвоение на основе dimnames из 'df'
new <- matrix(NA, length(master_source_target),
length(master_source_target),
dimnames = list(master_source_target, master_source_target))
new[row.names(df), colnames(df)] <- unlist(df)
new
# a b c d
#a 10 NA NA NA
#b NA 5 3 NA
#c NA NA NA NA
#d NA NA NA NA
. В качестве ОП использовали tibble
, мы можно также использовать tidyverse подходя от
library(tibble)
library(dplyr)
library(tidyr)
df %>%
rownames_to_column('rn') %>%
pivot_longer(cols = -rn, values_drop_na = TRUE) %>%
complete(rn = master_source_target, name = master_source_target) %>%
pivot_wider(names_from = name, values_from = value) %>%
column_to_rownames('rn')
или с crossing
и объединением
crossing(Var1 = master_source_target, Var2 = master_source_target) %>%
left_join(as.data.frame.table(as.matrix(df))) %>%
pivot_wider(names_from = Var2, values_from = Freq) %>%
column_to_rownames('Var1')