2013-03-04 90 views
-5

我試圖找到一個更快的方式來總結個人在會話中的發生,以便計算他們的關係水平。基本上,我想爲每兩個人計算至少有一次觀察到的次數。我已經在這裏查看了答案,包括融合和慷慨,但沒有找到使用它們的好方法。這是我的低效代碼:R創建矩陣的發生

presence=array(0,c(8,10)) # session by individual 
counter=array(0,c(10,10)) 
# put some data into the array: 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 0 1 0 0 0 0 0 0 0  0 
[2,] 0 0 1 1 1 1 0 0 0  0 
[3,] 0 0 0 0 0 0 1 0 0  0 
[4,] 0 0 0 0 0 0 0 1 0  0 
[5,] 0 0 0 0 0 0 0 1 0  0 
[6,] 0 0 0 0 0 0 0 0 1  0 
[7,] 0 0 0 0 0 0 0 0 1  0 
[8,] 0 0 1 0 1 1 0 0 0  1 


    for (a in 1:10){ 
    for (b in 1:10){ 
     for (c in 1:8) { 
     if ((presence[c,a]>0)|(presence[c,b]>0)) counter[a,b]=counter[a,b]+1 
     # calculate something using this counter for each two individuals a and b 
     } 
    } 
    } 

謝謝你的幫助。 Amiyaal

+1

我認爲你需要解釋你問題多一點,我不知道這裏發生了什麼。你的原始數據是什麼樣的?這代碼在哪裏代表?如果你想從原始數據中計算事件中的同時發生的人,那麼這當然是可能的,我會建議看看一些igraph社交網絡分析庫。 – slammaster 2013-03-04 20:54:23

+0

你的問題如上所述沒有任何意義。您使用該聲明,「在多年的會話中對個人的會話進行總結」而不定義任何條款,並且您提供的代碼是垃圾。 – N8TRO 2013-03-04 20:59:21

+0

在場數組存儲哪些人在第i年的會話c中出現。內循環計算一年中至少有一人(a或b)出現的次數(即總計所有會話)。我希望現在更清楚。 – user2133354 2013-03-04 21:01:27

回答

0

好的,仍然不完全清楚,但我認爲現狀是一個鄰接矩陣,其中列代表用戶,行代表事件,因此presence[i,j]指示用戶我參加了事件j。

如果我正確解釋,那麼計數似乎是共生矩陣,對嗎? count[i,j]應記錄我和j一起參加的活動數量?

如果你看看文獻2模式的社交網絡分析,具體到歸屬網絡,對於這個直接計算:

count = t(presence)%*%presence 

現在我會檢查與您自己的數據製作確定它是準確的:只需在計數中隨機檢查一對細胞,並將它們與存在進行比較。

此外,這些矩陣的行傳統上是用戶和事件是列。

編輯:如果相反,你希望算作用戶參加的事件數量(而不是他們參加的事件數量),那麼它是一個聯合而不是一個交集。因此,這將是我參加的+活動用戶數j活動用戶的數量出席 - 交集

x = t(presence)%*%presence 
numEvents = diag(x) 
counts = matrix(rep(numEvents,dim(x)[1]),nrow=dim(x)[1],byrow=TRUE)+matrix(rep(numEvents,dim(x)[1]),nrow=dim(x)[1],byrow=FALSE)-x 

這不是最完美的解決方案,但它應該工作

+0

謝謝,但這不是我正在尋找的,因爲它計算CO-OCCURRENCE,而我想要計算所有至少有一個人在場的情況。 – user2133354 2013-03-04 21:51:53