首页 > 解决方案 > 用索引的名称替换字符串中的字母

问题描述

我有一个带有名字的向量

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"

标签: rgsub

解决方案


我确信可以使它更简洁,但我不知道如何

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"

推荐阅读