Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换R中字符串中的第N个字符_R_Data.table_Stringr - Fatal编程技术网

替换R中字符串中的第N个字符

替换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(

在加拿大,邮政编码为“B7J 6B1”。 为了清理邮政编码,我需要替换所有打字错误,以便“81J 8BL”变成“B7J 6B1”。 换句话说,我需要一个函数来替换字符串
.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
from
stringr

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
from
stringr

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个字符