【发布时间】:2014-01-14 14:43:12
【问题描述】:
我不知道如何解决这个问题,我唯一能想到的就是暴力循环,但我什至不确定如何以合理的方式循环遍历 data.table 的行。
我有一个双键 data.table 和一个基于第一个键的相关矩阵。我需要通过查找任何给定对的相关性来为所有元素构建完整的相关矩阵,如果第二个键不匹配,则该矩阵为零。
简化示例:
library(data.table)
DT = data.table(Key1 = c("A", "A", "A", "B", "B", "C", "C"), Key2 = c(1,2,3,2,3,3,4), OtherData = "Irrelevant")
setkey(DT, Key2, Key1)
M = matrix(c(1.0, 0.4, 0.3,
0.4, 1.0, 0.2,
0.3, 0.2, 1.0), nrow = 3)
所以我们的起始 data.table 看起来像:
> DT
Key1 Key2 OtherData
1: A 1 Irrelevant
2: A 2 Irrelevant
3: B 2 Irrelevant
4: A 3 Irrelevant
5: B 3 Irrelevant
6: C 3 Irrelevant
7: C 4 Irrelevant
当 A、B 和 C 共享相同的 Key2 值时,它们的预定义相关矩阵由 M 给出:
> M
[,1] [,2] [,3]
[1,] 1.0 0.4 0.3
[2,] 0.4 1.0 0.2
[3,] 0.3 0.2 1.0
我现在需要制作一个 7x7 矩阵,如下所示:
> result
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1.0 0 0 0 0 0 0
[2,] 0 1.0 0.4 0 0 0 0
[3,] 0 0.4 1.0 0 0 0 0
[4,] 0 0 0 1.0 0.4 0.3 0
[5,] 0 0 0 0.4 1.0 0.2 0
[6,] 0 0 0 0.3 0.2 1.0 0
[7,] 0 0 0 0 0 0 1.0
我们使用 M 中与每个 Key2 上可用的 Key1 值匹配的部分创建了块对角矩阵(Key2 是有效的时间)。
【问题讨论】:
标签: r matrix data.table outer-join