我在R中遇到了一个问题,我需要在R中操作一个向量。
假设我有一个长度为12的向量:
vector <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)现在我需要将元素1+2、3+4、5+6等添加到一个新的向量中,在示例中如下:
newvector <- c(3, 7, 11, 15, 19, 23) 我需要对较长的序列做同样的操作,这样它就可以添加前三个,然后是4-6,然后是7-9等等。
newvector <- c(6, 15, 24, 33) 诸若此类。
发布于 2021-12-02 11:27:30
将向量放入矩阵中,然后使用colSums。这里有一个函数可以这样做。
vector <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
calculate_sum <- function(v, n) {
colSums(matrix(v, nrow = n))
}
calculate_sum(vector, 2)
#[1] 3 7 11 15 19 23
calculate_sum(vector, 3)
#[1] 6 15 24 33发布于 2021-12-02 11:06:52
我会这样做:split把向量分成n个群,Reduce把每个组的n个元素和起来。
newvector <- Reduce(`+`, split(vector,c(1,2)))
[1] 3 7 11 15 19 23作为一种功能,您可以拥有以下功能:
splitSum <- function(v, n) Reduce(`+`, split(v, c(1:n)))
splitSum(vector,3)
[1] 6 15 24 33发布于 2021-12-02 11:07:07
一种选择可以是:
tapply(x, cumsum(seq_along(x) %% 2 == 1), sum)
1 2 3 4 5 6
3 7 11 15 19 23 N= 3:
tapply(x, cumsum(seq_along(x) %% 3 == 1), sum)
1 2 3 4
6 15 24 33https://stackoverflow.com/questions/70198212
复制相似问题