У меня есть файл с разделением табуляцией как
A B 0.5
A C 0.75
B D 0.2
И я хочу преобразовать его в квадратную матрицу, как
A B C D
A 0 0.5 0.75 0
B 0 0 0.2
C 0 0
D 0
Как я могу пойти об этом в R?Спасибо,
Если у вас есть данные во фрейме данных со следующими именами столбцов:
Var1 Var2 value
, вы можете использовать
xtabs(value ~ Var1 + Var2, data = df)
См. Пакет plyr
для более общего изменения формы данных функции также.
Другой подход (не такой элегантный, как у JoFrhwld)
df<- read.table(textConnection("
Var1 Var2 value
A B 0.5
A C 0.75
B D 0.2
"),header = T)
lev = unique(c(levels(df$Var1),levels(df$Var2)))
A = matrix(rep(0,length(lev)^2),nrow=length(lev))
colnames(A) = lev
rownames(A) = lev
apply(df,1,function(x) A[x[1],x[2]]<<-as.numeric(x[3]))
> A
A B C D
A 0 0.5 0.75 0.0
B 0 0.0 0.00 0.2
C 0 0.0 0.00 0.0
D 0 0.0 0.00 0.0
>
Я предполагаю, что это взвешенная матрица смежности для графа. В таком случае вас может заинтересовать пакет igraph
для чтения данных в виде списка взвешенных ребер.