我有一个向量(在这种情况下是从数据帧中提取),我想通过使用两个另外的向量来计算一些总和,这些向量包含要使用的数据向量的开始和结束索引。为此,我正在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之间求和。我正在努力在跨数百行的数据框架中实现此方法。
我现在正在尝试编写一个函数来执行此操作,但是想要解决这个问题,以防我缺少一个更简单的解决方案。
答案 0 :(得分:1)
这不需要太多检查就可以工作,并且不包括 N/As(希望您已经从数字向量来自的 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))
答案 1 :(得分:0)
也许有更好的解决方案,但是我写了一些快速代码来完成单个向量的工作,如果可以的话,我可以重写其中的一些代码来计算多个列的总和。
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专家),但是应该可以。