增加序列不相等

时间:2015-08-31 14:40:10

标签: r

我无法复制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的长度取决于数据。

目的是将输出s添加到x; data.frame(s,x)

1 个答案:

答案 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