【问题标题】:Find values that are between list of numbers查找介于数字列表之间的值
【发布时间】:2018-09-04 00:56:16
【问题描述】:

我有两个如下数字列表。

x <- c(1, 5, 10, 17, 21, 30)
y <- c(2, 7, 19)

在我的数据集中,x 将 1 到 30 划分为不同的段(从 1-5、5-10、10-17、17-21、21-30)。是否可以将这些段与y 中的数字相匹配? (在这种情况下,我希望得到c(1,5,17) 作为输出,因为 2 介于 1 和 5 之间,7 介于 5 和 10 之间,而 19 介于 17 和 21 之间。)

【问题讨论】:

    标签: r subset


    【解决方案1】:

    ?findInterval 救援:

    x[findInterval(y,x)]
    #[1]  1  5 17
    

    【讨论】:

      【解决方案2】:

      使用cut 是另一种选择

      cut(y, breaks = x, labels = x[-length(x)])
      #[1] 1  5  17
      

      也可以通过labels = FALSE完成

      x[cut(y, breaks = x, labels = FALSE)]
      #[1]  1  5 17
      

      【讨论】:

      • 即使只是 x[cut(y, breaks = x)]x[cut(y, x)] 也会这样做,因为 cut 返回一个因子,尽管我认为它与 findInterval 略有不同,因为它具有打开/关闭参数。
      【解决方案3】:

      你可以用sapply和一个简单的函数来做到这一点

      sapply(y, function(a) x[max(which(x<a))])
      [1]  1  5 17
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多