Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用for循环R对数据帧列中的数字序列进行计数_R_Dataframe_For Loop_Counter - Fatal编程技术网

使用for循环R对数据帧列中的数字序列进行计数

使用for循环R对数据帧列中的数字序列进行计数,r,dataframe,for-loop,counter,R,Dataframe,For Loop,Counter,我想计算一个数字序列在R中出现的次数,比如说1,然后是2(顺序是1和2),尝试使用for循环 set.seed(123) df<-as.data.frame(replicate(1,sample(0:2,50,rep=TRUE))) > df V1 1 2 2 2 3 2 4 1 5 2 6 1 7 1 8 1 基本上,我试图计算序列在列中出现的次数。我喜欢for-loop(为了学习)的想法,但我对其他方式持开放态度。谢谢。这可以在不使用for

我想计算一个数字序列在R中出现的次数,比如说1,然后是2(顺序是1和2),尝试使用for循环

set.seed(123)
df<-as.data.frame(replicate(1,sample(0:2,50,rep=TRUE)))
> df
   V1
1   2
2   2
3   2
4   1
5   2
6   1
7   1
8   1

基本上,我试图计算序列在列中出现的次数。我喜欢for-loop(为了学习)的想法,但我对其他方式持开放态度。谢谢。

这可以在不使用
for
循环的情况下实现

f1 <-function(vec, val){
        rl <- rle(vec)
        sum(rl$values[-length(rl$values)] == val[1] & rl$values[-1] == val[2])
   }

f1(df$V1, 1:2)
#[1] 1
counter  <- 0
    for(i in seq_len(nrow(df)-1)) {
      if(df$V1[i] == 1 & df$V1[i+1] == 2) {
         counter <- counter + 1
        }

    }
counter
#[1] 1

或者另一个选项是将
元素粘贴在一起,并使用
stru count

library(stringr)
str_count(str_c(df$V1, collapse=""), "12")
#[1] 1

另外,对
循环使用

f1 <-function(vec, val){
        rl <- rle(vec)
        sum(rl$values[-length(rl$values)] == val[1] & rl$values[-1] == val[2])
   }

f1(df$V1, 1:2)
#[1] 1
counter  <- 0
    for(i in seq_len(nrow(df)-1)) {
      if(df$V1[i] == 1 & df$V1[i+1] == 2) {
         counter <- counter + 1
        }

    }
counter
#[1] 1

counter Thank you@akrun,我稍微编辑了一下这个问题--rle是有效的,但是对于序列1和序列2的运行,我的意思是..谢谢@akrun这一切都非常有用。
df <- structure(list(V1 = c(2L, 2L, 2L, 1L, 2L, 1L, 1L, 1L)), 
  class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8"))