2015-08-31 26 views
1

我不能複製x的確切序列,它會生成更短的輸出s大約20觀察值,但它確實發生。爲什麼是這樣?我該如何解決(確保)它的長度總是等於基序列x?有時xs的方式不僅僅是2個觀測值(歸因於cumsum)。增加序列不等

實施例:

set.seed(123) 
# this sequence length is equal (or close): 
x <- diff(log(rnorm(500,5,1))); x[1:5] <- NA 
# this sequence doesn equal; is shorter as the output `s` 
x <- rnorm(500,0.1,0.1); x[1:5] <- NA 
z <- ifelse(x<0,FALSE,ifelse(x>0,TRUE,NA)) 
g <- z[!is.na(z)] 

s <- c(rep(NA,sum(is.na(z))), sequence(tabulate(cumsum(!g)))) 
s 
length(x) # check length 
length(s) # check length 

所以輸出s的長度是依賴於數據的。

這樣做的目的是增加輸出sx; data.frame(s,x)

+0

我不明白這個問題是問的。 –

+2

我認爲'表列'去掉0值。試用'table' – akrun

+0

@David:請看這裏:http://stackoverflow.com/questions/17820752/more-elegant-way-to-return-a-sequence-of-numbers-based-on-booleans/17820865 #17820865 – Maximilian

回答

1

如果我們看一下?tabulate

斌:一個數值向量(正整數),或一個因素。支持長 向量。

所以,我們要麼轉換爲factor爲正整數將不包括0或者我們可以使用table不存在這樣的問題。

s1 <- length(c(rep(NA,sum(is.na(z))), sequence(tabulate(factor(cumsum(!g)))))) 
s1 
#[1] 500 

或者使用table

s2 <- length(c(rep(NA,sum(is.na(z))), sequence(table(cumsum(!g))))) 
s2 
#[1] 500 

這等於length 'X'

length(x) 
#[1] 500