在R中如何将data frame中的短形式缩写替换为对应完整拼写
R中-e/i模式缩写批量替换方案
以下是两类常见需求的实现方法,可根据实际使用场景选择:
前置准备
先构造示例数据框方便测试,可直接替换为自己的实际数据:
# 示例数据框 df <- data.frame( id = 1:2, abbr_col = c("Ann-e/i", "Matt-e/i") )
场景1:替换为两个完整名称拼接的单个字符串
适合不需要拆分记录,仅把缩写替换为完整说明的场景:
tidyverse实现
library(dplyr) library(stringr) df_result <- df %>% # 仅匹配Ann、Matt前缀的-e/i规则,避免误改其他内容 mutate(full_col = str_replace(abbr_col, "(Ann|Matt)-e/i", "\\1e、\\1i"))
base R实现
df$full_col <- gsub("(Ann|Matt)-e/i", "\\1e、\\1i", df$abbr_col)
场景2:将缩写展开为两条独立记录
适合需要每个完整名称对应单独一行的分析场景:
library(dplyr) library(stringr) library(tidyr) df_expanded <- df %>% filter(str_detect(abbr_col, "(Ann|Matt)-e/i")) %>% mutate( prefix = str_extract(abbr_col, "(Ann|Matt)"), suffix = c("e", "i") ) %>% unnest(suffix) %>% mutate(full_name = paste0(prefix, suffix))
如果有更多前缀需要匹配,只需要把正则里的
(Ann|Matt)扩展为(Ann|Matt|自定义前缀1|自定义前缀2)的格式即可,规则完全通用。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

