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