R语言按首尾条件过滤行:保留首次到末次指定因子间的行
R数据框按Run列区间过滤实现方案
核心思路:先定位Run列第一个取值为Running的行号、最后一个取值为Running的行号,直接截取两个行号之间的所有行即可。
方法1:tidyverse(dplyr)实现(代码可读性高)
library(dplyr) # 定位首个Running的行位置 first_running <- which(data$Run == "Running")[1] # 定位最后一个Running的行位置 last_running <- tail(which(data$Run == "Running"), 1) # 切片取区间行 filtered_data <- data %>% slice(first_running:last_running)
方法2:基础R实现(无需加载第三方包)
first_running <- which(data$Run == "Running")[1] last_running <- tail(which(data$Run == "Running"), 1) filtered_data <- data[first_running:last_running, ]
异常兼容补充
如果存在Run列没有Running值的场景,可以增加判断逻辑避免报错:
if (any(data$Run == "Running")) { first_running <- which(data$Run == "Running")[1] last_running <- tail(which(data$Run == "Running"), 1) filtered_data <- data[first_running:last_running, ] } else { # 无Running值时可自定义返回逻辑,例如下方返回空数据框 filtered_data <- data[0, ] }
以上代码运行后得到的filtered_data即为符合要求的结果,和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者elfeu
相关产品推荐
相关产品推荐

