You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何匹配列中A/B/C序列后选中序列及下方n个指定单元格

R语言实现方案

实现逻辑

  • 首先识别Sequence列中连续匹配A→B→C序列的起始行位置
  • 对每个匹配到的起始位置,标记该行及后续共5行(3行匹配序列+2行额外行)的Selected列为对应Sequence值,其余行留空

代码实现

方案1:tidyverse生态实现(可读性高)

# 加载依赖包
library(dplyr)
library(slider)

# 构造原始表
Table1 <- data.frame(
  ID = 1:31,
  Sequence = c("A", "B", "D", "E", "A", "B", "C", "f", "n", "p", "C", "D", "D", "E", 
               "A", "B", "C", "z", "t", "g", "A", "C", "D", "A", "B", "C", "p", "l", 
               "x", "v", "A")
)

# 自定义参数
n_extra <- 2 # 额外选取的行数
target_seq <- c("A", "B", "C") # 目标匹配序列
seq_len <- length(target_seq)
total_mark_len <- seq_len + n_extra # 单次匹配总标记行数

# 识别所有匹配目标序列的起始位置
match_starts <- which(
  slide_lgl(Table1$Sequence, ~all(.x == target_seq), .before = 0, .after = seq_len-1, .complete = TRUE)
)

# 生成所有需要标记的行索引,避免超出表格总行数
mark_rows <- unique(unlist(lapply(match_starts, function(x) x:min(x + total_mark_len -1, nrow(Table1)))))

# 生成结果表
Table2 <- Table1 %>%
  mutate(Selected = ifelse(row_number() %in% mark_rows, Sequence, ""))

# 验证结果和预期一致
expected_Selected <- c("", "", "", "", "A", "B", "C", "f", "n", "", "", "", "", "", "A", 
                       "B", "C", "z", "t", "", "", "", "", "A", "B", "C", "p", "l", "", "", "")
identical(Table2$Selected, expected_Selected) # 返回TRUE

方案2:纯base R实现(无需安装第三方包)

# 构造原始表
Table1 <- data.frame(
  ID = 1:31,
  Sequence = c("A", "B", "D", "E", "A", "B", "C", "f", "n", "p", "C", "D", "D", "E", 
               "A", "B", "C", "z", "t", "g", "A", "C", "D", "A", "B", "C", "p", "l", 
               "x", "v", "A")
)

# 自定义参数
n_extra <- 2
target_seq <- c("A", "B", "C")
seq_len <- length(target_seq)
total_mark_len <- seq_len + n_extra
n_row <- nrow(Table1)

# 识别匹配起始位置
match_starts <- c()
for (i in 1:(n_row - seq_len +1)) {
  if (all(Table1$Sequence[i:(i+seq_len-1)] == target_seq)) {
    match_starts <- c(match_starts, i)
  }
}

# 生成标记行索引并赋值
mark_rows <- unique(unlist(lapply(match_starts, function(x) x:min(x + total_mark_len -1, n_row))))
Table1$Selected <- ""
Table1$Selected[mark_rows] <- Table1$Sequence[mark_rows]
Table2 <- Table1

内容的提问来源于stack exchange,提问作者Farshid Owrang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:57:04