使用R中数据帧的元素基于公式创建系数矩阵

时间:2018-08-17 14:20:24

标签: r dataframe matrix

我在R中有以下dataframe名为(A)

A <- data.frame("budget_range" = c("less_than_1", "1-5", "5-20", "20-50", "50-100", "100-500", "more_than_500"),
        "coefficient" = c(0.005, 0.01, 0.05, 0.2, 0.5, 1, 5))

Budget_range    Coefficient
1_less_than_1     0.005
2_1-5             0.01
3_5-20            0.05
4_20-50           0.2
5_50-100          0.5
6_100-500         1
7_more_than_500   5

我现在想创建一个7x7的矩阵,其中矩阵的每个元素= min(BudgetRange1,BudgetRange2)/ max(BudgetRange1,BudgetRange2)。

例如,对于元素2,1或1,2(它们应该相同),数学将为0.005 / 0.01 = 0.5。

它应该给出这样的内容:

   1     2     3     4     5     6     7
1  1   0.5    0.1  0.025  0.01  0.005  0.001
2  0.5  1     0.2   0.05  0.02   0.01  0.002
3  ...
4
5
6
7

任何想法怎么做?提前非常感谢!

1 个答案:

答案 0 :(得分:2)

我们可以使用outer来完成

outer(A$coefficient, A$coefficient, FUN = function(...) pmin(...)/pmax(...))
#    [,1]  [,2] [,3]  [,4] [,5]  [,6]  [,7]
#[1,] 1.000 0.500 0.10 0.025 0.01 0.005 0.001
#[2,] 0.500 1.000 0.20 0.050 0.02 0.010 0.002
#[3,] 0.100 0.200 1.00 0.250 0.10 0.050 0.010
#[4,] 0.025 0.050 0.25 1.000 0.40 0.200 0.040
#[5,] 0.010 0.020 0.10 0.400 1.00 0.500 0.100
#[6,] 0.005 0.010 0.05 0.200 0.50 1.000 0.200
#[7,] 0.001 0.002 0.01 0.040 0.10 0.200 1.000