2017-07-07 84 views
2

假設我有以下數據:的R - 填充計數資料矩陣

df <- data.frame(teams=c("A", "B", "C", "D"), 
      players=c(5,2,1,2), 
      stringsAsFactors = FALSE) 

> df 
    teams players 
1  A  5 
2  B  2 
3  C  1 
4  D  2 

我要填寫類似於一個球員的配對組合在一個團隊中所有其他玩家在所有其他的加權4x4矩陣團隊。

有了這個例子中,輸出應該是這樣的:

m <- matrix(c(4,2,1,2,5,1,1,2,5,2,0,2,5,2,1,1), nrow=4, ncol=4) 
colnames(m) <- df$teams 
rownames(m) <- df$teams 

> m 
    A B C D 
A 4 5 5 5 
B 2 1 2 2 
C 1 1 0 1 
D 2 2 2 1 

注意,從A隊一名球員可以玩:

  • 4從球隊其他球員一個
  • 2個玩家來自B隊
  • 1隊的球員C
  • 2隊的球員D

有誰知道如何做到這一點?

真實數據包含數千支球隊和數百萬玩家。

回答

5

你可以試試這個:

size <- nrow(df) 
diag(-1, size, size) + df$players 

#  [,1] [,2] [,3] [,4] 
#[1,] 4 5 5 5 
#[2,] 2 1 2 2 
#[3,] 1 1 0 1 
#[4,] 2 2 2 1 

要設置尺寸名稱:

with(df, { 
    size <- length(teams) 
    m <- diag(-1, size, size) + players 
    dimnames(m) <- list(teams, teams) 
    m 
}) 

# A B C D 
#A 4 5 5 5 
#B 2 1 2 2 
#C 1 1 0 1 
#D 2 2 2 1