R语言按对称映射规则转换字符串字符的管道实现方案求解
R实现编码对称转换的管道方案
核心使用R内置的chartr()函数实现一一对应字符替换,搭配dplyr管道操作完成批量转换,不需要拆分字符,执行效率高。
chartr()是R内置的向量化字符替换函数,会将输入字符串中每一个匹配old字符集第n位的字符,替换为new字符集第n位的字符,完美适配本次对称映射的需求,执行效率远高于逐字符拆分拼接的方案。
1. 加载依赖包
仅需要dplyr即可,无额外复杂依赖:
library(dplyr)
2. 完整转换代码
两种写法效果完全一致,可按需选择:
写法1:动态生成映射规则(推荐,不易写错)
# 自动生成对称映射的字符集 old_chars <- paste0(c(LETTERS, 0:9), collapse = "") new_chars <- paste0(c(rev(LETTERS), 9:0), collapse = "") # 管道批量转换 test_df <- test_df %>% mutate(calculated_NewName = chartr(old_chars, new_chars, plant_sp))
写法2:硬编码映射规则(逻辑更直观)
test_df <- test_df %>% mutate(calculated_NewName = chartr( "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", "ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210", plant_sp ))
3. 结果验证
执行转换后可通过如下代码验证结果和示例完全匹配:
identical(test_df$calculated_NewName, test_df$NewName) # 返回 [1] TRUE 说明转换完全正确
转换后输出示例
| plant_sp | NewName | calculated_NewName |
|---|---|---|
| AB1234 | ZY8765 | ZY8765 |
| CC0000 | XX9999 | XX9999 |
| ZX9998 | AC0001 | AC0001 |
| AA1110 | ZZ8889 | ZZ8889 |
| LO8880 | OL1119 | OL1119 |
内容的提问来源于stack exchange,提问作者Ido
相关产品推荐
相关产品推荐

