【问题标题】:finding vector value belonging to each interval找到属于每个区间的向量值
【发布时间】:2012-04-29 18:41:56
【问题描述】:

我在 R 中有两个不同长度的向量,我可以组合这两个向量。我想找到属于每个区间的向量值:

x = c(1, 2, 3.5, 4, 6, 7.5, 8, 9, 10, 11.5, 12) 
y = c(2.5, 6.5) 

w = sort(c(x, y))

我想找到小于2.5的向量x和向量x属于区间(2.5, 6.5)和大于6.5的向量x?

实际上,向量 y 的值在我的算法的每次迭代中都会发生变化,例如,我可能有长度为 4 的向量 y,那么如何在每次迭代中找到向量值属于每个区间?

【问题讨论】:

    标签: r


    【解决方案1】:

    试试:

    > split(x, findInterval(x, y))
    $`0`
    [1] 1 2
    
    $`1`
    [1] 3.5 4.0 6.0
    
    $`2`
    [1]  7.5  8.0  9.0 10.0 11.5 12.0
    

    当我们更改y时会发生这种情况

    > y = c(2.5, 6.5, 10.5)
    > split(x, findInterval(x, y))
    $`0`
    [1] 1 2
    
    $`1`
    [1] 3.5 4.0 6.0
    
    $`2`
    [1]  7.5  8.0  9.0 10.0
    
    $`3`
    [1] 11.5 12.0
    

    【讨论】:

      【解决方案2】:

      使用函数cut()将向量划分为区间:

      cut(x, breaks=c(-Inf, y, Inf))
      
       [1] (-Inf,2.5] (-Inf,2.5] (2.5,6.5]  (2.5,6.5]  (2.5,6.5]  (6.5, Inf] (6.5, Inf] (6.5, Inf] (6.5, Inf] (6.5, Inf] (6.5, Inf]
      Levels: (-Inf,2.5] (2.5,6.5] (6.5, Inf]
      

      【讨论】:

      • +1,我会稍微修改 cut(x,c(min(x),y,max(x)),include.lowest=TRUE) 以获取有关极端情况的信息。
      猜你喜欢
      • 2017-04-29
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      相关资源
      最近更新 更多