Sum the values in a vector according to the range

2019-10-18 16:08发布

我有4个向量:

a <- c(1.12,2.30,3.03,4.05)
b <- c(2.03,3.05,4.02,5.03)
c <- c(1.5, 1.6, 1.7, 2.1, 3.3, 3.7,4.1)
v <- c(2,3,3,2,17,13,50)  

我想要做的就是我想如果是向量c代表总结在矢量V的值,如果该系列在向量c数字是与A [1]和b [I]我想补充的在矢量v一起号码,并将其存储在一个新的载体。

这样的数字1.5,1.6,1.7是之间的[1]和b [1],使得[1] <C [1],C [2],C [3]的<b [1],因此总和在一个新的载体是2 + 3 + 3 = 8。我想这个号码存储在一个新矢量,然后转移到一个[2]和b [2]和数字与再次ç比较。 这是我到目前为止,但它给我一个错误:(。

a <- c(1.12,2.30,3.03,4.05)
b <- c(2.03,3.05,4.02,5.03)
c <- c(1.5, 1.6, 1.7, 2.1, 3.3, 3.7,4.1)
v <- c(2,3,3,2,17,13,50)  


i = 1
j = 1
k = 1
p = 1
S1 = NULL
U1 = NULL

while (i < length(c) & j < length(a))
{
  if (c[i] > a[j] & c[i] <= b[j])

    {
    S1[i] <- (v[i])    
    }
    i = i + 1

  U1[k] <- sum(S1) 

  else
  {
    j = j + 1
    k = k + 1  
  }

}

Answer 1:

你应该看看?cut?split ,例如:

c <- c(1.5, 1.6, 1.7, 2.1, 3.3, 3.7)
v <- c(2,3,3,2, 17,13)

## create corresponding intervals
splits <- cut(c, breaks=1:4)
## split v into intervals and sum them
lapply(split(v, f=splits), sum)
# $`(1,2]`
# [1] 8
#
# $`(2,3]`
# [1] 2
#
# $`(3,4]`
# [1] 30


文章来源: Sum the values in a vector according to the range specified by other vectors
标签: r vector