基于另一个索引矩阵增加矩阵

时间:2016-07-14 17:12:30

标签: r performance matrix indices

我有一个矩阵:

a <- matrix(0,nrow=26,ncol=26)
tags <- sample(letters)
colnames(a) <- tags
rownames(a) <- tags

和另一个矩阵:

b <- matrix(c(1,2,1,2,1,2,3,5,5,5),nrow=5,ncol=2)

我想增加ab每行指定索引的所有单元格

这会引起以下变化:

a[b[1,1],b[1,2]] <- a[b[1,1],b[1,2]] +1
a[b[2,1],b[2,2]] <- a[b[2,1],b[2,2]] +1
...

我正在寻找一种有效的解决方案,最好是不涉及循环的解决方案

3 个答案:

答案 0 :(得分:1)

你可以尝试这个:

library(dplyr)
countB <- data.frame(b) %>% group_by(X1, X2) %>% summarise(Count = n())
a[as.matrix(countB[-3])] <- countB[[3]]

答案 1 :(得分:0)

我们可以使用ave

中的base R
v1 <- ave(seq_len(nrow(b)), b[,1], b[,2], FUN = length)
i1 <- !duplicated(b)

a[b[i1,]] <- v1[i1]

答案 2 :(得分:0)

您可以使用dplyr中的library(plyr) cnt <- as.matrix(count(b,c(1,2))) # x.1 x.2 freq # [1,] 1 2 1 # [2,] 1 5 2 # [3,] 2 3 1 # [4,] 2 5 1 a[cnt[,1:2]] <- cnt[,3] 功能:

cnt <- as.data.frame(as.table(table(as.data.frame(b))))

  # V1 V2 Freq
# 1  1  2    1
# 2  2  2    0
# 3  1  3    0
# 4  2  3    1
# 5  1  5    2
# 6  2  5    1

或使用基数R计算计数:

{{1}}