使用for循环R对数据帧列中的数字序列进行计数
我想计算一个数字序列在R中出现的次数,比如说1,然后是2(顺序是1和2),尝试使用for循环使用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
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"))