2015-11-03 22 views
0

對於一個隨機生成的100個伯努利試驗:怎樣計算二或三比特計數

11010101.... 
  1. 如何使用「R」來計算二位計數,即在人看到的次數每00序列,01,10,11
  2. 如何使用「R」來計算三比特數,即時間序列中的一個看到每個000,001,010的數量,011,100,101,110,111

回答

2

請注意,如果你粘貼在一起的第99跑DOM與去年99平,你將擁有所有的二位平:

set.seed(144) 
trials <- rbinom(100, 1, c(.5, .5)) 
table(paste0(head(trials, -1), tail(trials, -1))) 
# 00 01 10 11 
# 21 28 28 22 

爲了得到三比特數,可以通過粘貼在一起的第一個98,中部98,最後98擴展此觀察:

table(paste0(head(trials, -2), head(tail(trials, -1), -1), tail(trials, -2))) 
# 000 001 010 011 100 101 110 111 
# 9 11 14 14 12 16 14 8 

Riffing關@ MrFlick的評論下面關於使用embed的可能性,你可以生成一個量化的方式,連續n位的計數(又名調用paste0一次,而不是每行一次)有:

nbit <- function(dat, n) { 
    e <- embed(dat, n) 
    table(do.call(paste0, rev(split(e, col(e))))) 
} 
nbit(trials, 2) 
# 00 01 10 11 
# 21 28 28 22 
nbit(trials, 3) 
# 000 001 010 011 100 101 110 111 
# 9 11 14 14 12 16 14 8 
+0

它的工作令人驚歎!但爲什麼?你能再解釋一下嗎? – andrew

+0

'embed'函數可以幫助創建對/三元組。唯一的解決方法是它將它們置於相反的順序:'apply(embed(trials,2),1,paste0,collapse =「」)' – MrFlick