选择标记R周围的行

我正在尝试在相对较大的数据框中的标记之前和之后选择100行。标记是稀疏的,由于某种原因,我无法弄清楚或找到解决方案-这似乎不应该那么难,所以我可能缺少明显的东西。

这是一个非常简单的数据示例:

timestamp talking_yn transition_yn
0.01      n          n
0.02      n          n
0.03      n          n
0.04      n          n
0.05      n          n
0.06      n          n
0.07      n          n
0.08      n          n
0.09      n          n
0.10      n          n
0.11      y          y
0.12      y          n
0.13      y          n
0.14      y          n
0.15      y          n
0.16      y          n
0.17      y          n
0.18      y          n

我尝试使用各种答案(lagzoo中的dplyr)中使用不同的方法,但是它们都专注于选择一行或仅用标记。对于虚拟示例数据,如何选择transition == 'y'行之前和之后的5行?

d332426126 回答:选择标记R周围的行

我对此有一个快速的功能:

#' Lead/Lag a logical
#'
#' @param lgl logical vector
#' @param bef integer,number of elements to lead by
#' @param aft integer,number of elements to lag by
#' @return logical,same length as 'lgl'
#' @export
leadlag <- function(lgl,bef = 1,aft = 1) {
  n <- length(lgl)
  bef <- min(n,max(0,bef))
  aft <- min(n,aft))
  befx <- if (bef > 0) sapply(seq_len(bef),function(b) c(tail(lgl,n = -b),rep(FALSE,b)))
  aftx <- if (aft > 0) sapply(seq_len(aft),function(a) c(rep(FALSE,a),head(lgl,n = -a)))
  rowSums(cbind(befx,lgl,aftx),na.rm = TRUE) > 0
}

dat[leadlag(dat$transition_yn == 'y',2,4),]
#    timestamp talking_yn transition_yn
# 9       0.09          n             n
# 10      0.10          n             n
# 11      0.11          y             y
# 12      0.12          y             n
# 13      0.13          y             n
# 14      0.14          y             n
# 15      0.15          y             n

数据

dat <- read.table(header=TRUE,stringsAsFactor=FALSE,text="
timestamp talking_yn transition_yn
0.01      n          n
0.02      n          n
0.03      n          n
0.04      n          n
0.05      n          n
0.06      n          n
0.07      n          n
0.08      n          n
0.09      n          n
0.10      n          n
0.11      y          y
0.12      y          n
0.13      y          n
0.14      y          n
0.15      y          n
0.16      y          n
0.17      y          n
0.18      y          n")
本文链接:https://www.f2er.com/3157442.html

大家都在问