R 使用起始位置和结束位置的索引在向量元素之间求和
我有一个向量(在本例中是从数据帧中提取的),我想通过使用两个额外的向量(包含要使用的数据向量的开始和结束索引)来计算一些和。为此,我在R工作 例如,用于计算的向量为:R 使用起始位置和结束位置的索引在向量元素之间求和,r,R,我有一个向量(在本例中是从数据帧中提取的),我想通过使用两个额外的向量(包含要使用的数据向量的开始和结束索引)来计算一些和。为此,我在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 使用数据帧中的其他信息,我计算了另外两个向量,其中包含上述向量的索引位置,我称之为“开始”和“停止”,以表示我要求和的值之间的范围。例如: S
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]
}
}
}
sum这将在没有太多检查的情况下工作,并且不包括N/As(希望您已经从数字向量来自的data.frame中过滤掉它们)
subSums这太棒了@astel-让我找到了最需要的地方。然而,在我的数据中,我确实有NA,我需要跳过它,否则我会在结果向量中得到很多NA值。仍然是相对的R noob,因此不确定在哪里指定参数na.rm=TRUE,因为这些for循环中的和不是调用该函数的标准方式。
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))