数据集中的零组 - 确定它们的长度?

时间:2016-04-19 00:57:57

标签: r vector

我有几个动物运动的大型数据集,其暂停(零幅度矢量)特别令人感兴趣。以下是我有兴趣分析的数据类型的示例:

x <- Mod(c(rnorm(2),replicate(3,0),rnorm(4),replicate(5,0),rnorm(6),replicate(7,0)))
length(x)

这个例子有27个元素,在数据中有零字符串。

我想:

  1. 计算数据中存在多少个零组
  2. 确定每组零的长度并存储此&#34;报告&#34;在自己的数据框中。
  3. 谢谢!

1 个答案:

答案 0 :(得分:2)

一个选项是来自rleid

data.table
library(data.table)
data.table(x)[,if(all(!x)) .N ,rleid(!x)]
#   rleid V1
#1:     2  3
#2:     4  5
#3:     6  7

更新

如果我们需要两列&#34; ID&#34;,&#34;值&#34;,rle的修改选项将

ID <-  inverse.rle(within.list(rle(!x), {
          values[values] <- paste0("z", seq_along(values[values]))
          i1 <- !grepl("^z", values)
          values[i1] <- paste0("n", seq_along(values[i1])) }))
d1 <- data.frame(ID, values = x, stringsAsFactors=FALSE)

head(d1, 10)
#   ID     values
#1  n1 1.05402614
#2  n1 0.08924472
#3  z1 0.00000000
#4  z1 0.00000000
#5  z1 0.00000000
#6  n2 0.34346380
#7  n2 0.46807736
#8  n2 0.22253354
#9  n2 0.30781598
#10 z2 0.00000000