r - 用索引的名称替换字符串中的字母
问题描述
我有一个带有名字的向量
nms <- LETTERS[1:10]
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"
而且我通常有一条线
rule <- "X[,3]<=-0.85 & X[,10]>-0.95 & X[,5]>0.35"
我需要用"X"
具有相同索引的名称替换
X[,3]
到nms[3] ("C")
…… X[,10]
到nms[10] ("J")
我想得到它
"C[,3]<=-0.85 & J[,10]>-0.95 & E[,5]>0.35"
解决方案
我确信可以使它更简洁,但我不知道如何
nms <- LETTERS[1:10]
rule <- "X[,3]<=-0.85 & X[,10]>-0.95 & X[,5]>0.35"
r1 <- stringr::str_extract_all(rule,"\\[,([0-9]+)\\]")
n <- purrr::map_dbl(r1[[1]], readr::parse_number)
idx <- gregexpr(pattern ='X',rule)[[1]]
for(i in 1:length(n)) substr(rule, idx[i], idx[i]) <- nms[n[i]]
rule
[1] "C[,3]<=-0.85 & J[,10]>-0.95 & E[,5]>0.35"
推荐阅读
- c# - 如何搜索文件并将其显示在列表框中?
- angular6 - Angular 6 HttpErrorResponse 获取 200 状态
- mongodb - MongoDB 中的字段可见性限制/访问控制
- android - 从“编译”切换到“实现”会导致 DexPathList 错误
- swagger - 结合 Swashbuckle 自定义标签和描述
- javascript - 使用 Javascript 添加一个 android 智能应用程序横幅图标
- apache-flink - 如何检查 flink yarn session 是否已经在运行?
- android - 应为 BEGIN_ARRAY,但为 STRING 改造
- java - Spring-Boot 如何处理通过单例类提出的请求?
- java - 当程序运行时,Java 程序中的类会发生什么?