我有一个矩阵:
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)
我想增加a
中b
每行指定索引的所有单元格
这会引起以下变化:
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
...
我正在寻找一种有效的解决方案,最好是不涉及循环的解决方案
答案 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}}