r - 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”,但没有得到所需的结果。
解决方案
这可以完全矢量化:
数据:
> 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
循环都要快得多。
推荐阅读
- python-3.x - PYQT5 Python:如何在 QTreeWidget 列标题中添加 QComboBox?
- docker - 将 SSH 密钥注入 Docker 容器
- c# - 如何使用 A* 管理“无路径”场景
- python - 无法让 Discord 机器人上线
- python - 我正在尝试找到一种使用 Python 邮寄文件内容的方法
- javascript - 使用 Jasmine 进行测试,结果失败:未捕获(承诺中):TypeError:无法读取未定义的属性“firstName”
- java - 如何测量我的 Java + MongoDB 应用程序操作的毫秒/纳秒性能?
- c++ - std::is_invocable 在模板类型上的意外结果
- django - 如何在模型序列化器中将嵌套字段设为只读?
- python - 在 python 中,我们如何使用证书、订阅密钥连接到 API?