提问人:Akram H 提问时间:8/23/2023 最后编辑:r2evansAkram H 更新时间:8/24/2023 访问量:49
如何用正确的值(字符串)替换数字?
How to replace numbers by correct value (string)?
问:
我正在尝试用字符串值替换一些数字(从 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"
我该如何纠正这个问题?
答:
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]) } }
评论