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

如何筛选dataframe中i10_pr列条目前缀匹配指定列表的行

解决方案:筛选DataFrame中指定前缀匹配的行

示例数据准备

先还原你的示例DataFrame和前缀列表:

# 构造示例DataFrame
df <- data.frame(
  ID = c(7466851, 7023336, 2481935, 4605446, 7287173),
  visitorder = c(3, 1, 3, 1, 2),
  i10_pr1 = c("BW28ZZZ", "0BDC8ZX", "5A09357", "5A1955Z", ""),
  i10_pr2 = c("BR30Y0Z", "0BDC8W7", "3C1ZX8Z", "0BH17EZ", ""),
  i10_pr3 = c("BR39Y0Z", "07D78ZX", "06HN33Z", "03HY32Z", ""),
  i10_pr4 = c("", "", "B54CZZA", "02HV33Z", ""),
  i10_pr5 = c("", "", "0W993ZX", "GZ58ZZZ", ""),
  sum = c(0, 0, 1, 3, 0),
  stringsAsFactors = FALSE
)

# 指定前缀列表
prefix_list <- c("0B", "ND", "3J", "BW", "BR")

方法1:使用tidyverse工具链(dplyr + stringr)

代码简洁可读性强,适合处理大型数据集:

library(dplyr)
library(stringr)

# 筛选符合条件的行
filtered_df <- df %>%
  rowwise() %>%
  mutate(has_match = any(str_starts(c_across(starts_with("i10_pr")), paste0("^(", paste(prefix_list, collapse = "|"), ")")))) %>%
  filter(has_match) %>%
  select(-has_match)

# 查看结果
print(filtered_df)

代码说明:

  • rowwise():按行处理数据
  • c_across(starts_with("i10_pr")):选取所有以'i10_pr'开头的列
  • str_starts(..., pattern):检查字符串是否匹配指定前缀,这里用paste把前缀列表拼接成正则表达式^(0B|ND|3J|BW|BR)
  • any(...):判断该行是否至少有一个匹配项
  • filter(has_match):保留匹配的行,最后移除辅助列has_match

方法2:使用Base R

无需加载额外包,用原生R实现:

# 生成正则匹配模式
pattern <- paste0("^(", paste(prefix_list, collapse = "|"), ")")

# 获取目标列索引
target_cols <- grep("^i10_pr", names(df))

# 对每行检查是否有匹配项
match_rows <- apply(df[, target_cols], 1, function(row) {
  any(grepl(pattern, row, perl = TRUE))
})

# 筛选行
filtered_df <- df[match_rows, ]

# 查看结果
print(filtered_df)

代码说明:

  • grep("^i10_pr", names(df)):定位所有以'i10_pr'开头的列
  • apply(..., 1, function(row)):按行遍历目标列
  • grepl(pattern, row):检查单元格是否匹配前缀正则,any()判断该行是否存在至少一个匹配
  • 用逻辑向量match_rows筛选DataFrame的行

两种方法都会得到你期望的输出:

#>       ID visitorder i10_pr1 i10_pr2 i10_pr3 i10_pr4 i10_pr5 sum
#> 1 7466851          3 BW28ZZZ BR30Y0Z BR39Y0Z                   0
#> 2 7023336          1 0BDC8ZX 0BDC8W7 07D78ZX                   0
#> 4 4605446          1 5A1955Z 0BH17EZ 03HY32Z 02HV33Z GZ58ZZZ   3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:11:11