我无法复制x
的确切序列,它会通过大约s
次观察产生更短的输出20
,但它确实会发生。为什么是这样?如何修复(确保)它的长度始终等于基本序列x
?有时,x
和s
的区别不仅仅是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
的长度取决于数据。
目的是将输出s
添加到x
; data.frame(s,x)
答案 0 :(得分:1)
如果我们查看?tabulate
bin:数字向量(正整数)或因子。长 支持向量。
因此,我们要么转换为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
等于&#39; x&#39;
的length
length(x)
#[1] 500