如何用tidyverse移除文本中数字前的末尾连字符(多列处理)
用tidyverse批量处理多列ID文本:移除末尾后接数字的连字符
核心解法
使用dplyr::across()批量处理目标列,结合stringr::str_replace()和正则表达式精准匹配并移除目标连字符。
示例代码
1. 构造示例数据
library(tidyverse) # 包含多列ID的示例数据集 data <- tibble( id = c("2022-05-19-admin-raca-16", "2022-05-19-admin-hyla16"), id2 = c("user-dev-23", "user-prod45") )
2. 批量处理指定列
# 处理指定的ID列(比如id和id2) processed_data <- data %>% mutate(across(c(id, id2), ~ str_replace(.x, "-(\\d+)$", "\\1")))
3. 批量处理所有字符列
如果需要自动处理数据中所有字符类型的列,改用:
processed_data <- data %>% mutate(across(where(is.character), ~ str_replace(.x, "-(\\d+)$", "\\1")))
正则说明
-(\\d+)$:精准匹配字符串末尾的连字符,要求连字符后紧跟一个或多个数字(\\d+),$锚定字符串结尾,避免误删中间的连字符。\\1:引用正则表达式中括号捕获的数字部分,替换时仅保留数字,相当于移除了目标连字符。
处理结果
processed_data #> # A tibble: 2 × 2 #> id id2 #> <chr> <chr> #> 1 2022-05-19-admin-raca16 user-dev23 #> 2 2022-05-19-admin-hyla16 user-prod45
内容的提问来源于stack exchange,提问作者Eizy
相关产品推荐
相关产品推荐

