r - 有效地将每一行与整个数据表相乘以实现大数据量
问题描述
尝试以自定义方式多个两个数据表。“dt_data”是基础数据,需要从“dt_matrix”的每一行中取多个。对于小集合,for 循环是可以的。当行数达到百万时如何有效地倍增
dt_data <- data.table('A' = c(1,3,2,1), 'B' = c(2,3,1,4))
dt_matrix <- data.table('A' = c(4,5), 'B' = c(3,2))
A B
1: 4 6
2: 12 9
3: 8 3
4: 4 12
5: 5 4
6: 15 6
7: 10 2
8: 5 8
解决方案
一个选项是outer
在数据集的每个相应列上使用并将其转换为data.table
setDT(data.frame(Map(function(x, y) c(outer(x, y)), dt_data,dt_matrix)))[]
# A B
#1: 4 6
#2: 12 9
#3: 8 3
#4: 4 12
#5: 5 4
#6: 15 6
#7: 10 2
#8: 5 8
或者另一个选项crossing
来自tidyverse
library(tidyverse)
crossing(dt_data, setnames(dt_matrix, c('A1', 'B1'))) %>%
transmute(A = A * A1, B = B* B1)
推荐阅读
- c++ - 排序并显示位数
- sugarcrm - 如何增加您可以在 SuiteCRM 上批量发送的电子邮件限制?
- c# - 从导入的字符串实例化预制件以形成平铺地图
- java - (Node.js/Java) 如何使 XML 输出漂亮
- pseudocode - Dijkstra 算法伪代码“U”符号
- swift - 快速管理线程时遇到问题
- mysql - mysql的Spring数据jpa谓词提示索引(Jpa + Hibernate)
- javascript - 我的代码中有什么问题导致 MongoDB 拓扑错误
- c# - RxUI - WPF - 没有 DataContext 的样式 DataTrigger 绑定
- javascript - 检查键值对的一部分