替换R中字符串中的第N个字符
在加拿大,邮政编码为“B7J 6B1”。 为了清理邮政编码,我需要替换所有打字错误,以便“81J 8BL”变成“B7J 6B1”。 换句话说,我需要一个函数来替换字符串替换R中字符串中的第N个字符,r,data.table,stringr,R,Data.table,Stringr,在加拿大,邮政编码为“B7J 6B1”。 为了清理邮政编码,我需要替换所有打字错误,以便“81J 8BL”变成“B7J 6B1”。 换句话说,我需要一个函数来替换字符串.str中从“a”到“B”的第N个字符(即,如果它是a,它将用B替换它,否则它什么也不做-类似于str_replace()函数,但在字符级别上): str\u replaceCharacter不知道这会有多高的性能,但这里有一个不依赖正则表达式的base解决方案: str_replace_character = function(
.str
中从“a”到“B”的第N个字符(即,如果它是a,它将用B替换它,否则它什么也不做-类似于str_replace()
函数,但在字符级别上):
str\u replaceCharacter不知道这会有多高的性能,但这里有一个不依赖正则表达式的base
解决方案:
str_replace_character = function(string, index, pattern, replacement) {
needs_replacement = substr(string, index, index) == pattern
substr(string[needs_replacement], index, index) = replacement
return(string)
}
str_replace_character(c("B7J 6B1", "81J 8BL", "ABC"), 1, "8", "B")
# [1] "B7J 6B1" "B1J 8BL" "ABC"
我不知道它的性能如何,但这里有一个不依赖正则表达式的base
解决方案:
str_replace_character = function(string, index, pattern, replacement) {
needs_replacement = substr(string, index, index) == pattern
substr(string[needs_replacement], index, index) = replacement
return(string)
}
str_replace_character(c("B7J 6B1", "81J 8BL", "ABC"), 1, "8", "B")
# [1] "B7J 6B1" "B1J 8BL" "ABC"
您可以使用以下命令
str_replaceCharacter system.time(lappy(第六个,str_replaceCharacter,N=2,a=“1”,b=“7”))
用户系统运行时间
4.990 0.019 5.010
>
>系统时间(lappy(第七个字符,N=2,a=“1”,b=“7”))
用户系统运行时间
49.599 0.167 49.764
答案是
系统时间(lappy(第一个,str_replaceCharacter,N=2,a=“1”,b=“7”))
用户系统运行时间
0.003 0.000 0.027
>
>系统时间(lappy(秒,str_replaceCharacter,N=2,a=“1”,b=“7”))
用户系统运行时间
0.001 0.000 0.001
>
>系统时间(lappy(第三个,str_replaceCharacter,N=2,a=“1”,b=“7”))
用户系统运行时间
0.005 0.000 0.006
>
>系统时间(lappy(第四个,str_replaceCharacter,N=2,a=“1”,b=“7”))
用户系统运行时间
0.056 0.000 0.055
>
>系统时间(lappy(第五个字符,N=2,a=“1”,b=“7”))
用户系统运行时间
0.588 0.000 0.588
>
>系统时间(lappy(第六个字符,N=2,a=“1”,b=“7”))
用户系统运行时间
6.067 0.000 6.065
>
>系统时间(lappy(第七个字符,N=2,a=“1”,b=“7”))
用户系统运行时间
81.439 0.016 81.449
因此,托马斯的答案似乎表现得最好。您可以使用以下方法
str_replaceCharacter system.time(lappy(第六个,str_replaceCharacter,N=2,a=“1”,b=“7”))
用户系统运行时间
4.990 0.019 5.010
>
>系统时间(lappy(第七个字符,N=2,a=“1”,b=“7”))
用户系统运行时间
49.599 0.167 49.764
答案是
系统时间(lappy(第一个,str_replaceCharacter,N=2,a=“1”,b=“7”))
用户系统运行时间
0.003 0.000 0.027
>
>系统时间(lappy(秒,str_replaceCharacter,N=2,a=“1”,b=“7”))
用户系统运行时间
0.001 0.000 0.001
>
>系统时间(lappy(第三个,str_replaceCharacter,N=2,a=“1”,b=“7”))
用户系统运行时间
0.005 0.000 0.006
>
>系统时间(lappy(第四个,str_replaceCharacter,N=2,a=“1”,b=“7”))
用户系统运行时间
0.056 0.000 0.055
>
>系统时间(lappy(第五个字符,N=2,a=“1”,b=“7”))
用户系统运行时间
0.588 0.000 0.588
>
>系统时间(lappy(第六个字符,N=2,a=“1”,b=“7”))
用户系统运行时间
6.067 0.000 6.065
>
>系统时间(lappy(第七个字符,N=2,a=“1”,b=“7”))
用户系统运行时间
81.439 0.016 81.449
因此,托马斯的答案似乎表现最好。我们可以使用
stru sub
fromstringr
library(stringr)
str_replace_character <- function(string, index, pattern, replacement) {
needs_replacement <- str_sub(string, index, index) == pattern
str_sub(string[needs_replacement], index, index) <- replacement
return(string)
}
str_replace_character(c("B7J 6B1", "81J 8BL", "ABC"), 1, "8", "B")
库(stringr)
stru替换字符我们可以使用stru sub
fromstringr
library(stringr)
str_replace_character <- function(string, index, pattern, replacement) {
needs_replacement <- str_sub(string, index, index) == pattern
str_sub(string[needs_replacement], index, index) <- replacement
return(string)
}
str_replace_character(c("B7J 6B1", "81J 8BL", "ABC"), 1, "8", "B")
库(stringr)
str_replace_character你能展示一个可复制的小例子吗?str_replace character(ZIP,1,“8”,“B”)
测试第一个字符是否为“8”,如果是,则将其更改为“B”?这是正确的。只有当第n个字符等于ACan时,它才用B替换第n个字符。你可以展示一个小的可重复的例子。str\u replaceCharacter(ZIP,1,“8”,“B”)
测试第一个字符是否为“8”,如果是,则将其更改为“B”?这是正确的。仅当第n个字符等于A时,它才用B替换第n个字符