我有一個矢量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