按索引用名称替换字符串中的字母
Replace letter in string with names by indices
我有一个带有名称的向量
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"
答案不完整:从
开始
r1 <- stringr::str_extract_all(rule,"\[,([0-9]+)\]")
n <- purrr::map_dbl(r1[[1]], readr::parse_number)
第一行提取括号内的所有表达式;第二个从每个中检索数值。
现在是一个 for
循环,每次循环都使用 sub
将第一个 X
替换为 nms
的相应元素。
我确信可以使它更简洁,但我不知道如何
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"
我有一个带有名称的向量
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"
答案不完整:从
开始r1 <- stringr::str_extract_all(rule,"\[,([0-9]+)\]")
n <- purrr::map_dbl(r1[[1]], readr::parse_number)
第一行提取括号内的所有表达式;第二个从每个中检索数值。
现在是一个 for
循环,每次循环都使用 sub
将第一个 X
替换为 nms
的相应元素。
我确信可以使它更简洁,但我不知道如何
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"