r-用计数数据填充矩阵

r-用计数数据填充矩阵,r,matrix,dataframe,R,Matrix,Dataframe,假设我有以下数据: 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 df 团队成员 1 A 5 2 B 2 3 C 1 4D2

假设我有以下数据:

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
df
团队成员
1 A 5
2 B 2
3 C 1
4D2
我想填充一个加权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
m您可以尝试以下方法:

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