【问题标题】:Create intervals with equal spacing around 0在 0 左右创建等间距的间隔
【发布时间】:2017-02-24 05:33:33
【问题描述】:

我根据 R 中的输入值进行中断,然后根据这些值应用相等的间隔。

为此,我提供了一个输入向量:

for_break = c(-100, -90, -80, -50, 0, 3, 5, 20, 30, 40, 80)

然后我应用相等的间隔中断,总共使用 5 个间隔:

library(classInt)

breaks = classIntervals(for_break, n = 5, style = "equal", intervalClosure = "right")

我返回休息时间:

breaks_num = breaks$brks

返回:

[1] -100  -64  -28    8   44   80

不过,我想以数字 0 为中心休息一下。

有没有办法提供一个输入向量,并在正反两面都在零附近提供相等的间隔?

例如,如果我提供了这个输入向量:

c(-8, -6, -3, -2, 2, 4, 6, 9)

并指定我希望在零的正负侧有相等的间距,每边有 3 个间隔,我会得到:

c(-8.000, -5.333, -2.666, 0.000, 3.000, 6.000, 9.000)

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用此逻辑并从中创建一个函数。

    x=c(-8, -6, -3, -2, 2, 4, 6, 9)
    i=max(x)/3
    j=min(x)/3
    c(rev(seq(0, min(x), j)), seq(0, max(x), i)[-1])
    

    【讨论】:

    • :) 你打败了我。
    • 可能是几秒钟。
    • 确实如此。无论如何,我也会把我的留在这里,因为它只是略有不同。
    【解决方案2】:

    怎么样:

    for_break = c(-100, -90, -80, -50, 0, 3, 5, 20, 30, 40, 80)
    
    equalSpacing <- function( vector, per.side ) {
      negs <- seq.int( from = min( vector ), to = 0, length.out = per.side + 1L )
      pos <- seq.int( from = 0, to = max( vector ), length.out = per.side + 1L )
      return( c( negs, pos[ pos != 0 ] ) )
    }
    
    equalSpacing( for_break, 4 )
    

    【讨论】:

    • 谢谢,我真的很喜欢这个例子。我在我的真实数据集Error in seq.int(from = min(vector), to = 0, length.out = per.side + 1L) : 'from' must be finite 上返回了这个错误。显然您的示例有效,但您知道为什么会发生这种情况吗?
    • 你的输入向量是什么?
    • 它很长,我认为它与对象类型有关。原谅我,我是来自 python 的 R 新手。当我做typeof(object) 时,我得到double,所以我只能说它是一个浮点数
    • min(object) 返回什么?
    • 它返回-0.501841。我的数据中有NA,我删除了它们,它现在可以工作了。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2020-07-11
    • 2015-03-12
    • 2019-04-22
    • 1970-01-01
    • 2017-05-04
    相关资源
    最近更新 更多