首页 > 解决方案 > R中的乘法

问题描述

我有一个庞大的数据集。数据涵盖约 4000 个地区。

我需要做这样的乘法:每行中的每个数字首先应该乘以相应的列名/值(0 或...)。然后,应将这些结果数字相加并除以该行中的总数(totaln)。

例如,数据是这样的:

region    totan   0    1    2    3    4    5    6    7     .....
1         1346    5    7    3    9    23   24   34   54    .....
2         1256    7    8    4    10   34   2    14   30    .....
3         1125    83   43   23   11   16   4    67   21    .....
4         3211    43   21   67   12   13   12   98   12    .....
5         1111    21   8    9     3   23   13   11    0    .....
....      ....    ..   ..   ..   ..   ..   ..   ..   ..    .....
4000      2345    21   9    11   45   67   89   28   7     .....

计算应该是这样的:

例如在区域 1:(5*0)+(7*1)+(3*2)+(9*3)+(23*4)+(24*5)+(34*6)+(7 *54)...= 结果/1346=结果

我需要对所有地区进行这样的分析。我尝试了几种方法,例如使用“for”和“apply”,但没有得到所需的结果。

标签: rmultiplication

解决方案


这可以完全矢量化:

数据:

> df
  region totan  0  1  2  3  4  5  6  7
1      1  1346  5  7  3  9 23 24 34 54
2      2  1256  7  8  4 10 34  2 14 30
3      3  1125 83 43 23 11 16  4 67 21
4      4  3211 43 21 67 12 13 12 98 12
5      5  1111 21  8  9  3 23 13 11  0
6   4000  2345 21  9 11 45 67 89 28  7

as.matrix(df[3:10]) %*% as.numeric(names(df)[3:10]) / df$totan

          [,1]
[1,] 0.6196137
[2,] 0.3869427
[3,] 0.6711111
[4,] 0.3036437
[5,] 0.2322232
[6,] 0.4673774

在庞大的数据集上,这应该比任何for*apply循环都要快得多。


推荐阅读