2016-05-09 20 views
4

我有一个矢量x <- c("H","H","T","H","T","T","H","H","H","H","T")从硬币翻转。我想从上面的向量中构造一个带有两个变量(模式,长度)的数据帧。将一个矢量分成块,直到发生事件

模式字段会像{HHT,HT,T,HHHHT}和相应的长度将是{2,1,0,4}

我的内涵是获得连续头的计数,直到尾部出现在硬币翻转。

回答

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 
1

您可以使用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 
+1

我不认为这相当回答了这个问题; OP在连续“H”的数目之后,包括在'T' – SymbolixAU

+0

之间有0 Hs谢谢@Symbolix – HubertL

相关问题