我有以下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
显示了我要查找的内容。这似乎是我无法弄清楚的:我想创建一个matrix
或dataframe
的项目,它是项目长度/数量的维度。为此,我可以A%*%t(A)
进行操作,但是我希望该值采用在coefficient_table
中找到的相应值。
例如,让我们考虑矩阵[a,b]
的元素B
:a
在A
中具有变量“ 1-5”,b
也是如此。然后,我们在名为“ 1-5”的行和名为“ 1-5”的列下的coefficient_table
处等于1,因此元素[a,b] = 1。
让我们再举一个例子,例如矩阵[c,e]
的元素B
:c
的变量为“ 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