【发布时间】:2016-05-01 16:33:17
【问题描述】:
我正在尝试在 R 中填充一个最终将是对称的大矩阵(55920484 个元素)(因此我实际上只对矩阵的一半执行计算)。结果值矩阵是具有相同行名和列名的方阵。矩阵中的每个值都是比较唯一列表和计算交叉点数的结果。该数据来自更大的数据帧 (427.5 Mb)。这是迄今为止我最快的解决方案,我正在尝试摆脱我知道很慢的循环:
for(i in 1:length(rownames(values))){
for(j in i:length(colnames(values))){
A = data[data$Stock==rownames(values)[i],"Fund"]
B = data[data$Stock==colnames(values)[j],"Fund"]
values[i, j] = length(intersect(A, B))
}
}
我尝试了其他几种方法,例如使用带有 SQL 连接的数据库、使用带有 0 和 1 的稀疏矩阵以及使用 R 中的 sqldf 包。
这是我的数据结构:
head(data)
Fund Stock Type Shares.Held Maket.Value X..of.Portfolio Rank Change.in.Shares X..Change X..Ownership
1 12 WEST CAPITAL MANAGEMENT LP GRUB CALL 500000 12100000 0.0173 12 500000 New N/A
2 12 WEST CAPITAL MANAGEMENT LP FIVE SH 214521 6886000 0.0099 15 214521 New 0
3 12 WEST CAPITAL MANAGEMENT LP SHAK SH 314114 12439000 0.0178 11 307114 4387 1
4 12 WEST CAPITAL MANAGEMENT LP FRSH SH 324120 3650000 0.0053 16 -175880 -35 2
5 12 WEST CAPITAL MANAGEMENT LP ATRA SH 393700 10398000 0.0149 14 162003 69 1
6 12 WEST CAPITAL MANAGEMENT LP ALNY SH 651000 61285000 0.0875 4 No Change 0 1
【问题讨论】:
-
听起来 data.table 可以做得很好。也许发布您的
values和dataobjects 的head,即提供有关数据结构的更多信息。欢呼
标签: r performance optimization matrix sparse-matrix