使用开始和结束位置的索引对向量元素之间的总和



我有一个向量(在本例中是从数据帧中提取的(,我想通过使用两个包含要使用的数据向量的开始和结束索引的附加向量来计算一些总和。 为此,我在 R 工作。

例如,我用于计算的向量是:

Data Vector:
[1] 1.45
[2] 1.56
[3] 1.57
[4] 1.40
[5] 3.45
[6] 1.45
[7] 1.66
[8] 2.03
[9] 1.33

使用数据框中的其他信息,我计算了另外两个向量,其中包含上述向量的索引位置,我称之为"开始"和"停止",以表示我想要对值求和的范围。 例如:

Start: 
[1] 1 
[2] 4
[3] 7
End: 
[1] 3 
[2] 6
[3] 9

我想使用这两个索引向量在我的数据向量中元素 1-3、4-6 和 7-9 之间进行求和。 我正在努力寻找一种在具有数百行的数据框中实现它的方法。

我现在正在尝试编写一个函数来执行此操作,但想把它放上去,以防万一我缺少更简单的解决方案。

也许有更好的解决方案,但我写了一些快速代码,可以对单个向量执行您想要的操作,可以重写其中的一些代码以计算多列的总和,我敢肯定,如果这是您想要的。

sum<-c(rep(0,length(start)))

for (i in 1:length(start)){
for (j in start[i]:end[i]){
if(is.na(data[j] == FALSE)){
sum[i]<-sum[i]+data[j]
}
}
}

已编辑以与 NA 一起使用。 再次可能是更好的方法(我也不是 R 专家(,但这应该有效。

这将在没有太多检查的情况下工作,并且不包括N/A(希望您将从数字向量来自的data.frame中过滤掉它们(。

subSums <- function(vector, start_vector, end_vector){
if (length(start_vector) != length(end_vector)){
print("Start and End Point vectors are not the same length")
return()
}

result <- NULL
for (index in seq_along(start_vector)) {
result[index] <- sum(vector[start_vector[index]:end_vector[index]])
}

return(result)
}

使用示例:

vec<-1:20
subSums(vec, c(1,3), c(2,4))

相关内容

  • 没有找到相关文章

最新更新