使用dataframe中的两行计算序列匹配数

使用dataframe中的两行计算序列匹配数,r,dataframe,sequence,R,Dataframe,Sequence,我们可以使用以下代码筛选满足要求的行导程可以向前移动整个矢量。这个数据集的答案是三 S=Excel_bestand_schapen seq=c("stilstaan", "ruiken") library(zoo) result=rollapply(S, 2, identical, seq) length(result[result == TRUE]) 库(dplyr) dat2% 过滤器(代码%in%“Stistaan”&铅(代码)%in%“ruiken”&铅(修改器)%in%“aa

我们可以使用以下代码筛选满足要求的行<代码>导程可以向前移动整个矢量。这个数据集的答案是三

S=Excel_bestand_schapen
seq=c("stilstaan", "ruiken")
library(zoo)
result=rollapply(S, 2, identical, seq)
length(result[result == TRUE])    
库(dplyr)
dat2%
过滤器(代码%in%“Stistaan”&铅(代码)%in%“ruiken”&铅(修改器)%in%“aan对象”)
nrow(dat2)
# [1] 3
数据

library(dplyr)

dat2 <- dat %>%
  filter(code %in% "stilstaan" & lead(code) %in% "ruiken" & lead(Modifier) %in% "aan object") 

nrow(dat2)
# [1] 3

dat使用base R和www的dat数据帧:

dat <- read.table(text = "       Tijd 'nummer schaap'                     code   Modifier comment status
1     2.971             1                stilstaan       NA      NA  START
                  2     5.457             1                   ruiken 'aan object'      NA  POINT
                  3    10.703             1                stilstaan         NA      NA   STOP
                  4    10.704             1                    lopen         NA      NA  START
                  5    12.959             1                    lopen         NA      NA   STOP
                  6    12.960             1                stilstaan         NA      NA  START
                  7    22.732             1                   ruiken 'aan object'      NA  POINT
                  8    29.383             1                stilstaan         NA      NA   STOP
                  9    29.384             1                    lopen         NA      NA  START
                  10   42.568             1                    lopen         NA      NA   STOP
                  11   42.569             1                   ruiken 'aan object'      NA  POINT
                  12   49.206             1                    lopen         NA      NA  START
                  13   66.533             1                    lopen         NA      NA   STOP
                  14   66.534             1                stilstaan         NA      NA  START
                  15   67.134             1                   ruiken 'aan object'      NA  POINT
                  16   72.999             1                stilstaan         NA      NA   STOP
                  17   73.000             1                    lopen         NA      NA  START
                  18   77.480             1                    lopen         NA      NA   STOP
                  19   77.481             1                stilstaan         NA      NA  START
                  20   81.773             1               rondkijken         NA      NA  START",
                  header = TRUE, stringsAsFactors = FALSE)

可以将相关列折叠为单个字符串

sum(ifelse((dat$code == "stilstaan") & 
             (c(dat$code[2:length(dat$code)], NA) == "ruiken") &
             (c(dat$Modifier[2:length(dat$Modifier)], NA) == "aan object"),
           1, 0))

ruiken
是否总是遵循
stilstaan
ruiken
是否总是有一个修饰符
aan对象
?您是否可以发布
dput(head(df,10))
的结果,以便更容易复制您的数据?谢谢,这非常有效!如果将来需要的话,我甚至可以使用2个修饰符,这段代码对其他将来的项目也非常有用
sum(ifelse((dat$code == "stilstaan") & 
             (c(dat$code[2:length(dat$code)], NA) == "ruiken") &
             (c(dat$Modifier[2:length(dat$Modifier)], NA) == "aan object"),
           1, 0))
collapse <- paste(paste(dat$code, dat$Modifier), collapse=" ")
# [1] "stilstaan NA ruiken aan object stilstaan NA lopen ...
pattern <- "stilstaan NA ruiken aan object"
stringr::str_count(pattern, collapse)
# 3