我有一个矢量x <- c("H","H","T","H","T","T","H","H","H","H","T")
从硬币翻转。我想从上面的向量中构造一个带有两个变量(模式,长度)的数据帧。将一个矢量分成块,直到发生事件
模式字段会像{HHT,HT,T,HHHHT}和相应的长度将是{2,1,0,4}
我的内涵是获得连续头的计数,直到尾部出现在硬币翻转。
我有一个矢量x <- c("H","H","T","H","T","T","H","H","H","H","T")
从硬币翻转。我想从上面的向量中构造一个带有两个变量(模式,长度)的数据帧。将一个矢量分成块,直到发生事件
模式字段会像{HHT,HT,T,HHHHT}和相应的长度将是{2,1,0,4}
我的内涵是获得连续头的计数,直到尾部出现在硬币翻转。
鉴于矢量
x <- c("H","H","T","H","T","T","H","H","H","H","T")
diff(c(0, as.integer(gregexpr("T", paste0(x, collapse = ""))[[1]]))) - 1
# [1] 2 1 0 4
说明
关闭载体引入串
paste0(x, collapse = "")
## "HHTHTTHHHHT"
查找所有的T
小号
as.integer(gregexpr("T", paste0(x, collapse = ""))[[1]])
## [1] 3 5 6 11
的T
S之间H
数将每个值之间的差,减去1
附加一个领先0
和找到每个值之间的差。
diff(c(0, as.integer(gregexpr("T", paste0(x, collapse = ""))[[1]]))) - 1
[1] 2 1 0 4
您可以使用rle
计算T的所有H,则添加零H系列:
x <- c("H","H","T","H","T","T","H","H","H","H","T")
y <- rle(x=='T')
table(c(rep(0,sum(y$lengths[y$values & y$lengths>1]-1)),y$lengths[!y$values]))
0 1 2 4
1 1 1 1
我不认为这相当回答了这个问题; OP在连续“H”的数目之后,包括在'T' – SymbolixAU
之间有0 Hs谢谢@Symbolix – HubertL