【问题标题】:Adding two data frames of different sizes and subsets添加两个不同大小和子集的数据框
【发布时间】:2017-08-29 00:07:24
【问题描述】:

我有一堆看起来像这样的转换矩阵。

> temp
        31-60 5-30 61-90 Current PaidOff
5-30      283  317     9     500       9
Current     0 2935     0  179989    1689
PaidOff     0    0     0       0       0

我想标准化大小,所以我用正确的行名和列名制作了一个 0 矩阵:

> blankMatrix
                  Current 5-30 31-60 61-90 91-120 ChargeOff_Default PaidOff
Current                 0    0     0     0      0                 0       0
5-30                    0    0     0     0      0                 0       0
31-60                   0    0     0     0      0                 0       0
61-90                   0    0     0     0      0                 0       0
91-120                  0    0     0     0      0                 0       0
ChargeOff_Default       0    0     0     0      0                 0       0
PaidOff                 0    0     0     0      0                 0       0

有没有办法轻松地将第一个矩阵添加到第二个矩阵。因此,例如数字 283 将自动进入位置 (2,3)。我希望避免一个冗长而混乱的 for 循环,我会不断迭代并检查行名和列名是否匹配。

谢谢!

【问题讨论】:

    标签: r dataframe dplyr tidyr


    【解决方案1】:

    您可以使用expand.gridtemp 的行名和列名创建行和列索引矩阵,然后blankMatrix[matrix index] 将从矩阵索引中的索引对中选择值;要更改相应索引处的值,只需为其分配值即可;

    temp <- as.matrix(temp)
    blankMatrix <- as.matrix(blankMatrix)
    
    matIndex <- as.matrix(expand.grid(rownames(temp), colnames(temp)))
    blankMatrix[matIndex] <- temp
    blankMatrix
    #                  Current X5.30 X31.60 X61.90 X91.120 ChargeOff_Default PaidOff
    #Current            179989  2935      0      0       0                 0    1689
    #5-30                  500   317    283      9       0                 0       9
    #31-60                   0     0      0      0       0                 0       0
    #61-90                   0     0      0      0       0                 0       0
    #91-120                  0     0      0      0       0                 0       0
    #ChargeOff_Default       0     0      0      0       0                 0       0
    #PaidOff                 0     0      0      0       0                 0       0
    

    【讨论】:

    • @Psidorn: 我得到了blankMatrix[matIndex] &lt;- temp Error in [(*tmp*, matIndex, value = list(31-60` = c(283L, : 替换中不支持的矩阵索引`
    • blankMatrix 似乎是一个数据框,您需要将其转换为矩阵才能使用。
    • 有什么方法可以用数据框做到这一点?临时矩阵是使用“as.data.frame.matrix”创建的
    • 实际上,将 temp 转换为矩阵然后继续工作正常。 :-)
    • 不错的答案。设置matIndex 的行的替代方法是:matIndex &lt;- as.matrix(as.data.frame.table(temp)[1:2])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多