首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >N元素的顺序加法

N元素的顺序加法
EN

Stack Overflow用户
提问于 2021-12-02 11:00:17
回答 5查看 123关注 0票数 3

我在R中遇到了一个问题,我需要在R中操作一个向量。

假设我有一个长度为12的向量:

代码语言:javascript
复制
vector <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)

现在我需要将元素1+23+45+6等添加到一个新的向量中,在示例中如下:

代码语言:javascript
复制
newvector <- c(3, 7, 11, 15, 19, 23) 

我需要对较长的序列做同样的操作,这样它就可以添加前三个,然后是4-6,然后是7-9等等。

代码语言:javascript
复制
newvector <- c(6, 15, 24, 33) 

诸若此类。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2021-12-02 11:27:30

将向量放入矩阵中,然后使用colSums。这里有一个函数可以这样做。

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2021-12-02 11:06:52

我会这样做:split把向量分成n个群,Reduce把每个组的n个元素和起来。

代码语言:javascript
复制
newvector <- Reduce(`+`, split(vector,c(1,2)))
[1]  3  7 11 15 19 23

作为一种功能,您可以拥有以下功能:

代码语言:javascript
复制
splitSum <- function(v, n) Reduce(`+`, split(v, c(1:n))) 
splitSum(vector,3)
[1]  6 15 24 33
票数 3
EN

Stack Overflow用户

发布于 2021-12-02 11:07:07

一种选择可以是:

代码语言:javascript
复制
tapply(x, cumsum(seq_along(x) %% 2 == 1), sum)

 1  2  3  4  5  6 
 3  7 11 15 19 23 

N= 3:

代码语言:javascript
复制
tapply(x, cumsum(seq_along(x) %% 3 == 1), sum)

 1  2  3  4 
 6 15 24 33
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70198212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档