R 识别数据框中显示模式的行

R 识别数据框中显示模式的行,r,dataframe,pattern-matching,match,R,Dataframe,Pattern Matching,Match,下面我有3列代码:一个组字段,一个商店的打开/关闭字段,以及商店的3个月滚动总和。我还有所需的解决方案输出 我的数据集可以看作是员工可用性的一部分。您可以假设每一行都是不同的时间段,如小时、天、月、年等等。在“打开/关闭”列中,我知道员工是否在场。第3个月滚动列是前几行的总和 我想确定的是这个滚动和列中的非零值,该特定组的间隔至少为3行。虽然不存在于该数据集中,但您可以假设可能存在多个零的“间隙” structure(list(Group = structure(c(1L, 1L, 1L, 1

下面我有3列代码:一个组字段,一个商店的打开/关闭字段,以及商店的3个月滚动总和。我还有所需的解决方案输出

我的数据集可以看作是员工可用性的一部分。您可以假设每一行都是不同的时间段,如小时、天、月、年等等。在“打开/关闭”列中,我知道员工是否在场。第3个月滚动列是前几行的总和

我想确定的是这个滚动和列中的非零值,该特定组的间隔至少为3行。虽然不存在于该数据集中,但您可以假设可能存在多个零的“间隙”

 structure(list(Group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
 2L, 2L, 2L), .Label = c("A", "B"), class = "factor"), X0_closed_1_open =      c(0L, 
1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L), X3month_roll_open = c(0L, 
0L, 1L, 2L, 2L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 2L, 0L, 1L, 1L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L), desired_solution = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L), .Label = c("no", "yes"), class ="factor")), .Names = c("Group", "X0_closed_1_open", "X3month_roll_open", "desired_solution"), class = "data.frame", row.names = c(NA, 
 -26L))
一种选择是:

res <- unsplit(
         lapply(split(df1, df1$Group), function(x) {
          rl <- with(x,rle(X3month_roll_open==0))
          indx <- cumsum(c(0,diff(inverse.rle(within.list(rl, 
                    values[values] <- lengths[values]>=3)))<0))
          x$Flag <- indx!=0 & x[,3]!=0
          x}),
        df1$Group)
 identical(c('no', 'yes')[res$Flag+1L], as.character(res$desired_solution))
 #[1] TRUE