将向量转化为除法表R

rhfm7lfc  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(145)

我有2列,一列是国家/地区,另一列是价值
如何将该表转换为一个排序的除法表,使每个值除以其他每个值,并将Country作为行名称和列名称,这些值将是每个可能的除法值。图片描述了我试图在Excel中完成的工作。我想在R中完成此工作。其中第一个表将转换为第二个表。我不知道“t care to have original values in yellow only in division table.不要在意只有除法表中的原始值显示为黄色。
Transform top table into bottom table
我已经尝试了许多旋转、连接、复制列等的组合,但都接近了我想要的结果。有没有一种简洁的方法可以做到这一点?

sigwle7e

sigwle7e1#

您正在寻找outer

x <- c(Argentina = 1.7, Australia = 5.5, Belgium = 0.5, Brazil = 8.7)
t(outer(x, x, `/`))

输出功率

Argentina  Australia    Belgium    Brazil
Argentina 1.0000000  3.2352941 0.29411765  5.117647
Australia 0.3090909  1.0000000 0.09090909  1.581818
Belgium   3.4000000 11.0000000 1.00000000 17.400000
Brazil    0.1954023  0.6321839 0.05747126  1.000000
eeq64g8w

eeq64g8w2#

x = c(arg = 1.7, aus = 5.5, bel = 0.5, bra = 8.7)

y = outer(x, x, FUN = \(a,b) b/a)
y

#           arg        aus        bel       bra
# arg 1.0000000  3.2352941 0.29411765  5.117647
# aus 0.3090909  1.0000000 0.09090909  1.581818
# bel 3.4000000 11.0000000 1.00000000 17.400000
# bra 0.1954023  0.6321839 0.05747126  1.000000

cbind(c(NA, x), rbind(" " = x, y))

#               arg        aus        bel       bra
#      NA 1.7000000  5.5000000 0.50000000  8.700000
# arg 1.7 1.0000000  3.2352941 0.29411765  5.117647
# aus 5.5 0.3090909  1.0000000 0.09090909  1.581818
# bel 0.5 3.4000000 11.0000000 1.00000000 17.400000
# bra 8.7 0.1954023  0.6321839 0.05747126  1.000000

相关问题