使用for循环R计算数据框列中的数字序列
count sequences of numbers in a dataframe column using a for loop R
我想计算一个数字序列在 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
...
counter = 0
for(i in seq_along(var1$df)){
if(i == 1 & i + 1 == 2){
counter = counter + 1
}
}
counter
基本上,我正在尝试计算序列在列中出现的次数。我喜欢 for 循环的想法(为了学习),但对其他方式持开放态度。谢谢。
这可以在没有 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
或使用rleid
library(dplyr)
library(data.table)
df %>%
group_by(grp = rleid(V1), V1) %>%
slice(1) %>%
ungroup %>%
mutate(V2 = lead(V1, default = last(V1))) %>%
summarise(n = sum(V1 == 1 & V2 == 2))
或者另一种选择是 paste
将元素放在一起并使用 str_count
计算计数
library(stringr)
str_count(str_c(df$V1, collapse=""), "12")
#[1] 1
此外,使用 for
循环
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
数据
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"))
我想计算一个数字序列在 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
...
counter = 0
for(i in seq_along(var1$df)){
if(i == 1 & i + 1 == 2){
counter = counter + 1
}
}
counter
基本上,我正在尝试计算序列在列中出现的次数。我喜欢 for 循环的想法(为了学习),但对其他方式持开放态度。谢谢。
这可以在没有 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
或使用rleid
library(dplyr)
library(data.table)
df %>%
group_by(grp = rleid(V1), V1) %>%
slice(1) %>%
ungroup %>%
mutate(V2 = lead(V1, default = last(V1))) %>%
summarise(n = sum(V1 == 1 & V2 == 2))
或者另一种选择是 paste
将元素放在一起并使用 str_count
library(stringr)
str_count(str_c(df$V1, collapse=""), "12")
#[1] 1
此外,使用 for
循环
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
数据
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"))