2017-02-24 58 views
0

我正在根据R中的输入值进行中断,然后根据这些值应用等间隔。创建等间距的间隔大约为0

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

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

然后我施加相等的间隔符,用5个间隔使用总共:

breaks_num = breaks$brks 

library(classInt) 

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

我与返回休息

返回:

[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) 

回答

1

什么:

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) 
+0

谢谢,我非常喜欢这个例子。我在我的真实数据集'Error in seq.int(from = min(vector),to = 0,length.out = per.side + 1L): 'from'must be finite'上返回了这个错误。很明显,你的例子可行,但任何想法,为什么这可能发生? –

+0

你的输入矢量是什么? – rosscova

+0

它很长,我认为它与对象类型有关。原谅我,我是来自python的R新手。当我做'typeof(object)'时,我得到'double',所以我可以告诉它是一个浮点型 –

2

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

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]) 
+1

:)你打我吧。 – rosscova

+0

这可能是几秒钟。 –

+0

确实。无论如何,我也会把它留在这里,因为它略有不同。 – rosscova