【问题标题】:r - Populate matrix with count datar - 使用计数数据填充矩阵
【发布时间】:2017-07-07 21:32:05
【问题描述】:

假设我有以下数据:

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 队的玩家可以与:

  • A 队的其他 4 名球员
  • B队2名队员
  • C 队 1 名球员
  • D 队 2 名队员

有人知道怎么做吗?

真实数据包含数千支球队和数百万球员。

【问题讨论】:

    标签: r matrix dataframe


    【解决方案1】:

    你可以试试这个:

    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
    

    【讨论】:

      猜你喜欢
      • 2014-07-28
      • 1970-01-01
      • 2019-01-19
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-08
      • 2018-01-23
      相关资源
      最近更新 更多