Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用起始位置和结束位置的索引在向量元素之间求和_R - Fatal编程技术网

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

我有一个向量(在本例中是从数据帧中提取的),我想通过使用两个额外的向量(包含要使用的数据向量的开始和结束索引)来计算一些和。为此,我在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]
        }
    }
 }

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))