如何用正确的值(字符串)替换数字?

How to replace numbers by correct value (string)?

提问人:Akram H 提问时间:8/23/2023 最后编辑:r2evansAkram H 更新时间:8/24/2023 访问量:49

问:

我正在尝试用字符串值替换一些数字(从 1 到 15),但它没有正确执行。这是我的代码:

before = c("1","11","2","22")

after = c("A","B","c","E")

phrase = list( c("1","11") , c("2","22") )


for (i in phrase){
 
  r =  stringi::stri_replace_all_fixed(
    
    i , 
    
    before, 
    
    after, 
    
    vectorize_all = FALSE)
  
  print(r)
  
}

这是我得到的

[1] "A"  "AA"
[1] "c"  "cc"

我该如何纠正这个问题?

r 替换 gsub

评论

2赞 r2evans 8/23/2023
你到底在期待什么?
0赞 Carl Witthoft 8/23/2023
这些都不是数字。这些是字符串中的数字。

答:

1赞 MrFlick 8/23/2023 #1

您不需要正则表达式,因为您正在进行全文匹配。您可以创建一个查找向量,从而创建一个简单的索引替换

lookup <- setNames(after, before)

for (i in phrase){
  r <- unname(lookup[i])
  print(r)
}
# [1] "A" "B"
# [1] "c" "E"

评论

0赞 Mark 8/23/2023
如果您喜欢,也可以将 for 循环替换为 :-)map(phrase, ~n[.x])
0赞 Mark 8/23/2023
vapply(phrase, \(x) n[x], character(2L))
1赞 Chris 8/23/2023
为了清楚起见,可以提及。map(phrase, purrr::map(
1赞 Carl Witthoft 8/23/2023
可能更容易创建并编写一个循环(未测试)myLUT <- cbind(before, after)myLUT[which(phrase[[j]][k] == myLUT[,1]),2]
1赞 Mark 8/24/2023
如果实际数据与示例不同,则更改示例。如果我们假设数据是好的,你不能责怪我们
1赞 Carl Witthoft 8/24/2023 #2

为“标记”加油:-) , 可能更容易创建并编写一个循环(未测试)myLUT <- cbind(before, after)myLUT[which(phrase[[j]][k] == myLUT[,1]),2]

评论

0赞 Mark 8/24/2023
:-) :-) :-) :-) :-) :-)
1赞 Mark 8/24/2023
我测试了一下,它有效!for (j in seq_along(phrase)){ for (k in seq_along(phrase[[j]])){ print(myLUT[which(phrase[[j]][k] == myLUT[,1]),2]) } }