我有一个数组,在这个数组中,我需要根据元素所属的索引将它们加在一起。
row_index <- c(1, 3, 1, 2, 2, 3, 3, 4)
array <- c(1.2, 3.4, 5.6, 7.2, 0.3, 5.6, 2.0, 3.1)
因此,在这种情况下,我想将所有属于第一行的元素按照以下方式添加到一起 row_index
一起。例如: 1.2
和 5.6
将被加在一起,因为它们对应的是同一行,基于 row_index
同样,对于第2行,它将是 7.2 + 0.3
. 所以我的结果数组会是。
result = (6.8 , 7.5 , 11.0 , 3.1)
对于上下文,我有一个稀疏矩阵,访问每个非零元素属于哪一行是非常容易和有效的,而且长度为 row_index
将永远与 array
.
一种选择是 tapply
从 base R
其中,分组是基于 "row_index "的。
unname(tapply(array, row_index, FUN = sum))
#[1] 6.8 7.5 11.0 3.1
或者另一个是 by
by(array, row_index, FUN = sum)
或与 rowsum
unname(rowsum(array, row_index)[,1])
#[1] 6.8 7.5 11.0 3.1
或与 xtabs
xtabs(array ~ row_index)
注:以上解决方案均来自 base R