2016-05-09 21 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

相關問題