如何根据 R 中另一个数组的信息在数组中添加元素?
How to add elements within an array based on information from another array in R?
我有一个数组,我需要根据元素所属的索引将元素添加到其中。
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)
我不知道如何在 R 中执行此操作。对于上下文,我有一个稀疏矩阵并且访问每个非零元素属于哪一行非常容易且高效,[=12 的长度=] 将始终与 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
我有一个数组,我需要根据元素所属的索引将元素添加到其中。
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)
我不知道如何在 R 中执行此操作。对于上下文,我有一个稀疏矩阵并且访问每个非零元素属于哪一行非常容易且高效,[=12 的长度=] 将始终与 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