需要计算R中向量中特定转换的数量

Hel*_*len 3 r vector

我在R中编写一个采样器,它基本上是一个很大的for循环,对于每个迭代我都要计算一个向量中的转换数.我有一个名为k的向量,它包含0和1,向量中有1000个条目.

我使用了以下非常慢的代码:

#we determine the number of transitions n00,n01,n10,n11
  n00=n01=n10=n11=0 #reset number of transitions between states from last time
  for(j in 1:(1000-1)){
    if(k[j+1]==1 && k[j]==0) {n01<-n01+1}
    else { if(k[j+1]==1 && k[j]==1) {n11<-n11+1}
           else { if(k[j+1]==0 && k[j]==1) {n10<-n10+1}
                  else{n00<-n00+1}
           }

    }
  }
Run Code Online (Sandbox Code Playgroud)

因此,每次循环运行时,变量n00,n01,n10,n11计算向量中的转换.例如,n00计算0后跟另一个0的次数.依此类推......

这很慢,我对R很新,所以我在这里绝望.我不明白如何使用grep,如果可能的话.

谢谢您的帮助

jor*_*ran 6

尝试这样的事情:

x <- sample(0:1,20,replace = TRUE)
> table(paste0(head(x,-1),tail(x,-1)))

00 01 10 11 
 4  3  4  8 
Run Code Online (Sandbox Code Playgroud)

headtail返回向量的部分x:除了最后元件,然后所有,但第一个元素.这意味着相应的元素是连续的对x.

然后paste0只需将每个元素转换为字符向量并粘贴第一个元素,第二个元素等.结果是一个字符向量,其元素如"00","01"等.然后table只计算每个元素中有多少个.

您可以将结果分配给新变量,如下所示:

T <- table(paste0(head(x,-1),tail(x,-1)))
Run Code Online (Sandbox Code Playgroud)

亲自试验每段代码,看看它是如何工作的.运行just head(x,-1)等,看看每件作品的作用.

要解决以下注释,要确保在运行时所有类型都显示计数,请先table将其转换为系数:

x1 <- factor(paste0(head(x,-1),tail(x,-1)),levels = c('00','01','10','11'))
table(x1)
Run Code Online (Sandbox Code Playgroud)