如何计算di或tri位计数

时间:2015-11-03 20:34:27

标签: r

对于随机生成的100个伯努利试验:

11010101....
  1. 如何使用" R"计算二位计数,即在00,01,10,11
  2. 的序列中看到的次数
  3. 如何使用" R"计算三位计数,即在序列中看到的次数000,001,010,011,100,101,110,111

1 个答案:

答案 0 :(得分:2)

请注意,如果您将前99次随机抽取与最后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 

关于@FrFlick关于使用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