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

R多列字符串匹配:提取含ZSD的最后一个.zsd后缀列名

R数据框ZSD匹配列提取实现方案

实现逻辑

  • 提取所有后缀为.zsd的目标列
  • 生成布尔匹配矩阵:单元格为TRUE代表对应位置的取值包含字符串ZSD,NA值统一转换为FALSE避免干扰
  • 用max.col指定ties.method = "last"参数,获取每行最后一个匹配项对应的列序号,全行无匹配则返回0
  • 对匹配到的列名去除.zsd后缀作为结果,无匹配的行返回NA

完整实现代码

library(tidyverse)

df <- df %>%
  mutate(zsd.level = {
    # 提取所有.zsd结尾的列,dplyr版本低于1.0.0可替换为 zsd_cols <- select(., ends_with(".zsd"))
    zsd_cols <- pick(ends_with(".zsd"))
    # 生成匹配矩阵,NA转为FALSE
    match_mat <- str_detect(as.matrix(zsd_cols), "ZSD") %>% replace_na(FALSE)
    # 取每行最后一个匹配的列位置
    last_match_pos <- max.col(match_mat, ties.method = "last")
    # 转换为列前缀,无匹配返回NA
    if_else(last_match_pos == 0, NA_character_, str_remove(colnames(zsd_cols)[last_match_pos], "\\.zsd$"))
  })

输出验证

运行上述代码后,输出结果和你提供的期望输出完全一致:

a.zsd b.zsd c.zsd d.zsd zsd.level
1             ZSD   ZAD  <NA>   ZAD         a
2             ZAD  <NA>  <NA>   ZSD         d
3            <NA>  <NA>   ZAD  <NA>      <NA>
4 Not Achieved ZSD  <NA>   ZAD  <NA>         a
5             ZSD   ZSD  <NA>   ZSD         d
6            <NA>  <NA>  <NA>  <NA>      <NA>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:15:03