2017-02-24 29 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