2016-03-22 4 views
0

Я хочу создать список сетевых матриц, разбитых на проект. Мои данные структурированы как это.r: создать список сетевых матриц

Project Person_i Person_j Value 
1  A   B   6 
1  B   A   6 
2  A   B   4 
2  A   C   5 
2  B   A   4 
2  B   C   9 
2  C   A   5 
2  C   B   9 

Я знаю, как разделить данные и как создавать двоичные краевые списки. Однако я просто не могу понять, как создать матрицы с ценными данными.

В частности, я хочу, чтобы мои данные, чтобы посмотреть, как этот

Список $ 1:

A B 
A 0 6 
B 6 0 

Список $ 2:

A B C 
A 0 4 5 
B 4 0 9 
C 5 9 0 

ответ

1

Вы можете попробовать в базе R:

#just in case the columns are factors 
df[,2:3]<-lapply(df[,2:3],as.character) 
f<-function(x) { 
    pers<-unique(unlist(x[,2:3])) 
    res<-matrix(0,length(pers),length(pers),dimnames=list(pers,pers)) 
    res[as.matrix(x[,2:3])]<-x[,4] 
    res 
} 
lapply(split(df,df$Project),f) 
#$`1` 
# A B 
# A 0 6 
# B 6 0 
#$`2` 
# A B C 
#A 0 4 5 
#B 4 0 9 
#C 5 9 0 

С reshape2 все проще:

require(reshape2) 
lapply(split(df,df$Project), 
     function(x) acast(x,Person_i ~ Person_j,value.var="Value",fill=0)) 
+0

Спасибо. Считаете ли вы, что это будет работать в очень большом наборе данных с сильными изменениями в размере кластера (т. Е. Проекта)? –

+0

Вам нужно попробовать. Используйте подмножество набора данных, если вы беспокоитесь о проблемах и смотрите, как он реагирует. – nicola

+0

Не могу сказать, не глядя на ваши данные. У вас есть странная двойная запятая в сообщении об ошибке: вы уверены, что не сделали опечатку? Сколько столбцов в вашем наборе данных? Почему вы не показали пример, который лучше отражает ваши фактические данные? – nicola

Смежные вопросы