创建一个矩阵并基于两个数据框更改元素

时间:2018-08-21 20:08:51

标签: r dataframe matrix

我有以下coefficient_table,它具有7个变量:从less_than_1到more_than_500。

coefficient_table <- data.frame("less_than_1" = c( 1, 0.5, 0.1, 0.025, 0.010, 0.005, 0.001),
                        "1-5" = c(0.500, 1.000, 0.200, 0.050, 0.020, 0.010, 0.002),
                        "5-20" = c(0.10, 0.20, 1.00, 0.25, 0.10, 0.05, 0.01),
                        "20-50" = c(0.025, 0.050, 0.250, 1.000, 0.400, 0.200, 0.040),
                        "50-100" = c(0.010, 0.020, 0.10, 0.400, 1.00, 0.500, 0.100),
                        "100-500" = c(0.005, 0.010, 0.050, 0.200, 0.500, 1.000, 0.200),
                        "more_than_500" = c(0.001, 0.002, 0.010, 0.040, 0.100, 0.200, 1.000))
row.names(coefficient_table) <- c("less_than_1","1-5","5-20","20-50","50-100","100-500", "more_than_500")


> coefficient_table
              less_than_1  X1.5 X5.20 X20.50 X50.100 X100.500 more_than_500
less_than_1         1.000 0.500  0.10  0.025    0.01    0.005         0.001
1-5                 0.500 1.000  0.20  0.050    0.02    0.010         0.002
5-20                0.100 0.200  1.00  0.250    0.10    0.050         0.010
20-50               0.025 0.050  0.25  1.000    0.40    0.200         0.040
50-100              0.010 0.020  0.10  0.400    1.00    0.500         0.100
100-500             0.005 0.010  0.05  0.200    0.50    1.000         0.200
more_than_500       0.001 0.002  0.01  0.040    0.10    0.200         1.000

然后我将这个data frame称为A,其中每行名称是一个项目,而列是其各自的变量,它们都是互斥的。因此,例如a的变量为“ 1-5”,b的变量也为“ 1-5”,依此类推。到目前为止,一切都很好。

A <- data.frame("less_than_1" = c(0,0,0,0,0,0), "1-5" = c(1,1,0,0,0,0), "5-20" = c(0,0,1,0,0,0), 
            "20-50" = c(0,0,0,1,1,0), "50-100" = c(0,0,0,0,0,0), "100-500" = c(0,0,0,0,0,1), 
            "more_than_500" = c(0,0,0,0,0,0))
row.names(A) <- c("a","b","c","d","e","f")

> A
  less_than_1 X1.5 X5.20 X20.50 X50.100 X100.500 more_than_500
a           0    1     0      0       0        0             0
b           0    1     0      0       0        0             0
c           0    0     1      0       0        0             0
d           0    0     0      1       0        0             0
e           0    0     0      1       0        0             0
f           0    0     0      0       0        1             0

下面的示例B显示了我要查找的内容。这似乎是我无法弄清楚的:我想创建一个matrixdataframe的项目,它是项目长度/数量的维度。为此,我可以A%*%t(A)进行操作,但是我希望该值采用在coefficient_table中找到的相应值。

例如,让我们考虑矩阵[a,b]的元素BaA中具有变量“ 1-5”,b也是如此。然后,我们在名为“ 1-5”的行和名为“ 1-5”的列下的coefficient_table处等于1,因此元素[a,b] = 1。

让我们再举一个例子,例如矩阵[c,e]的元素Bc的变量为“ 5-20”,而e的变量为“ 20-50”在矩阵A中。然后,我们在行“ 5-20”和列“ 20-50”下的coefficient_table处等于? 0.25,因此元素[c,e]等于0.25

任何人都知道如何创建具有项目长度的矩阵,同时还要更改元素的数值吗?如果矩阵是对称的,那也很好。我以后也可以申请triu(B, +1)

B
    a  b   c    d     e      f
a   0  1  0.2  0.05  0.05   0.01
b   0  0  0.2  0.05  0.05   0.01
c   0  0   0   0.25  0.25   0.05
d   0  0   0   0     1      0.2
e   0  0   0   0     0      0.2
f   0  0   0   0     0      0

0 个答案:

没有答案