r - 在 R 处按键更改字符串
问题描述
这是一个数据框,例如:
test_df <- structure(list(plant_id = c("AB1234", "CC0000", "ZX9998", "AA1110", "LO8880"),
NewName = c("ZY8765", "XX9999", "AC0001", "ZZ8889", "OL1119")),
row.names = c(NA, -5L), class = "data.frame",
.Names = c("plant_sp", "NewName"))
如您所见,有一个名为“plant_sp”的列,其代码为 6 个字符。我想将此代码转换为新代码(如“NewName”列中的这种格式:
对于字母:
A-Z
B-Y
C-X
D-W
E-V
F-U
G-T
.
.
.
对于数字:
0-9
1-8
2-7
3-6
4-5
5-4
.
.
.
plant_sp NewName
1 AB1234 ZY8765
2 CC0000 XX9999
3 ZX9998 AC0001
4 AA1110 ZZ8889
5 LO8880 OL1119
这样每个字符都会通过其值得到相反的值(0=9, 1=8... A=Z, B=Y...)
我该怎么做?管道解决方案会很棒。
非常感谢!
解决方案
实现所需结果的一种选择是通过查找表和stringr::str_replace_all
:
library(dplyr)
library(stringr)
lt_letters <- setNames(rev(LETTERS), LETTERS)
lt_numbers <- setNames(rev(0:9),0:9)
test_df %>%
mutate(NewName1 = str_replace_all(plant_sp, "[A-Z0-9]", function(x) c(lt_letters, lt_numbers)[x]))
#> plant_sp NewName NewName1
#> 1 AB1234 ZY8765 ZY8765
#> 2 CC0000 XX9999 XX9999
#> 3 ZX9998 AC0001 AC0001
#> 4 AA1110 ZZ8889 ZZ8889
#> 5 LO8880 OL1119 OL1119
推荐阅读
- javascript - 尝试在 JavaScript 中访问数组,结果未定义,不知道为什么
- javascript - 如何更改相对路径以指向服务器而不是本地主机?
- python - Python 调度表字符串变量
- json - 长列表的漂亮 json 格式
- r - 有没有办法通过 R 中的 K-Means 中的变量来计数/着色?
- javascript - 接受数组和数字的函数,如果在数组中找到,则返回数字的第一个索引
- java - 能够在邮递员中命中但不能在java中
- reactjs - React Hooks:从父级更改子级状态
- vue.js - JsPDF Vuejs - 是否可以创建自定义模板?
- html - 为什么我的 div 元素没有以页面为中心而只是对齐?