wak*_*ake 2 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
Run Code Online (Sandbox Code Playgroud)
我想填充一个加权的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
Run Code Online (Sandbox Code Playgroud)
请注意,A队的球员可以玩:
有谁知道如何做到这一点?
真实数据包含数千个团队和数百万玩家.
你可以试试这个:
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
Run Code Online (Sandbox Code Playgroud)
要设置维度名称:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |