【问题标题】:Uneven sequence where highest number changes最高数字变化的不均匀序列
【发布时间】:2016-10-05 09:20:47
【问题描述】:

我正在生成很多地图,其中的休息点会发生变化。我想要相同的间隔,但地图之间的最高数字会发生变化。我可以使用多个if,但一定有更好的方法吗?

maxvalues <- c(453, 25)
breaks <- c(0,1,2,5,10,20,50,100,200)

我想从这里得到

0,1,2,5,10,20,50,100,200, 453
0,1,2,5,10,25

有什么想法吗?

【问题讨论】:

    标签: r sequence


    【解决方案1】:

    我们可以遍历'maxvalues',获取'breaks'中小于它的元素,与'x'连接,然后unlist

    unlist(lapply(maxvalues,function(x) c(breaks[breaks< x], x)))
    #[1]   0   1   2   5  10  20  50 100 200 453   0   1   2   5  10  20  25
    

    【讨论】:

    • 非常感谢,很有魅力。仍在尝试了解所有申请。
    • @JeppeOlsen As maxvalues 是一个向量。通过使用lapply,它在list 中循环遍历该向量中的每个元素,创建布尔表达式(breaks &lt; x),子集breaksbreaks[breaks &lt; x]),与元素连接(@987654329 @) 和 unlist 到一个向量。
    【解决方案2】:

    鉴于breaks 已排序,我认为findInterval 非常适合您的问题,因为您可以找到小于您定义的最大值的最大数字。以下是如何去:

    sapply(maxvalues, function(x) c(breaks[1:findInterval(x, breaks)], x))
    
    #[[1]]
    # [1]   0   1   2   5  10  20  50 100 200 453
    
    #[[2]]
    #[1]  0  1  2  5 10 20 25
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多