У меня есть некоторые данные в этой форме:Создание матрицы соединения из кадра данных в R
> agreers <- read.csv('agreers.csv')
> attach(agreers)
> head(agreers)
wain1 wain2 count
1 Founder36 Mnist10_269 673
2 Founder3 Mnist10_19 665
3 Mnist10_140 Mnist10_257 663
4 Founder1 Founder15 659
5 Founder21 Founder25 654
6 Founder15 Founder32 654
Я создал данные таким образом, что wain1 <= wain2
, поэтому каждая пара появляется в таблице только один раз. Таким образом, это будет неориентированный граф.
Я хочу, чтобы создать матрицу соединений, например, так:
Mnist10_269 Mnist10_19 Mnist10_257 . . .
Founder36 673 ? ?
Founder3 ? 665 ?
Mnist10_140 ? ? 663
. . .
где 's будет равна нулю, если нет каких-либо данных в agreers
?. Так вот что я пытался:
> mat = matrix(0, nrow = length(unique(wain1)), ncol = length(unique(wain2)))
> rownames(mat) = unique(wain1)
> colnames(mat) = unique(wain2)
> for(i in as.integer(rownames(agreers))) mat[wain1[i], wain2[i]] = count[i]
Это делает что-то, т.е. mat
обновляется с номерами, но эти цифры не в нужном месте! Например, я ожидаю, что это вернет 673
.
> mat["Founder36","Mnist10_269"]
[1] 0
EDIT: Вот немного больше файла данных, чтобы показать «дублированные уровни в факторах» проблемы. Обратите внимание, что Mnist10_140 появляется дважды в первом столбце, но с разными значениями во втором столбце.
wain1,wain2,count
Founder36,Mnist10_269,673
Founder3,Mnist10_19,665
Mnist10_140,Mnist10_257,663
Founder1,Founder15,659
Founder21,Founder25,654
Founder15,Founder32,654
Mnist10_140,Mnist10_84,643
При обработке только что подмножество данных, я получаю предупреждения:
> agreers <- read.csv('temp.csv')
> connections <- xtabs(count ~ factor(wain1, levels = wain1) + factor(wain2, levels = wain2), agreers)
Warning message:
In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, :
duplicated levels in factors are deprecated
Простой способ - это просто 'xtabs (count ~ factor (wain1, levels = wain1) + factor (wain2, levels = wain2), agreers)' –
С полным набором данных этот подход работает, но дает мне предупреждения о " дублированные уровни в факторах устаревают ». – mhwombat
@mhwombat, добавляя 'unique', должен решить вашу проблему. – cdeterman