我有一个索引矩阵,其中一些索引重复 . 我在下面举一个例子 .
我有另一个矩阵A,其尺寸与索引兼容,并在任何地方都启动为0 . 我想做点什么
A[I] += 1
我面临两个问题:
-
A[I] = A[I] + 1
效率太低 -
矩阵
I
有冗余索引 . 例如,第2行和第6行是相同的,我想获得A[1,2] = 2
部分答案是创建一个3列矩阵,其中两个第一列是 unique(I)
的乘积,第三列是计数,但我也没有看到任何解决方案 . 任何指针或帮助将不胜感激!
> I is:
[,1] [,2]
[1,] 1 1
[2,] 1 2
[3,] 1 3
[4,] 1 4
[5,] 1 1
[6,] 1 2
[7,] 1 3
2 回答
使用稀疏矩阵方法可能是最快的(参见Matrix包和其他方法) .
使用标准matricies,您可以使用
xtabs
函数然后矩阵分配(根据注释编辑)折叠相同的行:你可以通过将核心功能从
as.data.frame.table
中拉出来而不是转换为数据帧然后再返回来使它更快一些 .这是另一个可能更有效的版本 . 它将覆盖由
xtabs
计算的一些0 's with other 0':如果A矩阵具有dimnames并且I矩阵具有名称而不是索引,那么后面的这个也将起作用(只需删除
as.numeric
.干得好: