Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
Regex 连接gsub_Regex_R_Optimization_Gsub - Fatal编程技术网

Regex 连接gsub

Regex 连接gsub,regex,r,optimization,gsub,Regex,R,Optimization,Gsub,我当前正在运行以下代码以清除重音字符中的数据: df <- gsub('Á|Ã', 'A', df) df <- gsub('É|Ê', 'E', df) df <- gsub('Í', 'I', df) df <- gsub('Ó|Õ', 'O', df) df <- gsub('Ú', 'U', df) df <- gsub('Ç', 'C', df) df一个选项可以是chartr > toreplace <- LETTERS

我当前正在运行以下代码以清除重音字符中的数据:

df <- gsub('Á|Ã', 'A', df)
df <- gsub('É|Ê', 'E', df)
df <- gsub('Í',   'I', df)
df <- gsub('Ó|Õ', 'O', df)
df <- gsub('Ú',   'U', df)
df <- gsub('Ç',   'C', df)

df一个选项可以是
chartr

> toreplace <- LETTERS
> replacewith <- letters
> (somestring <- paste(sample(LETTERS,10),collapse=""))
[1] "MUXJVYNZQH"
> 
> chartr(
+   old=paste(toreplace,collapse=""),
+   new=paste(replacewith,collapse=""),
+   x=somestring
+   )
[1] "muxjvynzqh"
>用(somestring)替换替换
>沙特尔(
+old=粘贴(toreplace,collapse=“”),
+新建=粘贴(替换为,折叠=”),
+x=somestring
+   )
[1] “muxjvynzqh”

试试这样的方法

iconv(c('Á'), "utf8", "ASCII//TRANSLIT")
只需将更多元素添加到
c()

编辑:它依赖于机器,请检查
帮助(iconv)

这是
R
解决方案

mychar <- c('ÁÃÉÊÍÓÕÚÇ')
iconv(mychar, "latin1", "ASCII//TRANSLIT") # one line, as requested
[1] "AAEEIOOUC"
mychar

2表示列,1表示行

这是一个编码问题,通常通过指示正确的编码来解决。如果仍要使用正则表达式来解决此问题,可以使用
gsubfn
编写一个线性解决方案:

library(gsubfn)
ll <- list('Á'='A', 'Ã'='A', 'É'='E',
           'Ê'='E', 'Í'='I', 'Ó'='O',
           'Õ'='O', 'Ú'='U', 'Ç'='C')
gsubfn('Á|Ã|É|Ê|Í|Ó|Õ|Ú|Ç',ll,'ÁÃÉÊÍÓÕÚÇ')
[1] "AAEEIOOUC"
gsubfn('Á|Ã|É|Ê|Í|Ó|Õ|Ú|Ç',ll,c('ÁÃÉÊÍÓÕÚÇ','ÍÓÕÚÇ'))
[1] "AAEEIOOUC" "IOOUC"   
库(gsubfn)

要做到这一点,真正的方法不是正则表达式,而是Unicode规范化。但是,我不确定Unicode库绑定的支持程度(例如ICU)是在R中,因此正确的解决方案实际可行。这对我来说返回
NA
。这应该可以
mychar是的,在Windows上你应该使用类似“ISO-8859-1”的东西,而不是“utf8”。这是一个有趣的解决方案,但它似乎只适用于单个向量。实际上,我必须读取一个包含900个条目的名称向量,我不能将整个向量推入
iconv
@WaldirLeoncio当然可以:
Vectorize(iconv)(rep(mychar,2),“latin1”,“ASCII//TRANSLIT”)
这对一个“a”有效替换,但是其余的呢?我的观点是:如果不运行同一个命令六次,我怎么能做到呢?请参见上面agstudy的回答,这非常有效
library(gsubfn)
ll <- list('Á'='A', 'Ã'='A', 'É'='E',
           'Ê'='E', 'Í'='I', 'Ó'='O',
           'Õ'='O', 'Ú'='U', 'Ç'='C')
gsubfn('Á|Ã|É|Ê|Í|Ó|Õ|Ú|Ç',ll,'ÁÃÉÊÍÓÕÚÇ')
[1] "AAEEIOOUC"
gsubfn('Á|Ã|É|Ê|Í|Ó|Õ|Ú|Ç',ll,c('ÁÃÉÊÍÓÕÚÇ','ÍÓÕÚÇ'))
[1] "AAEEIOOUC" "IOOUC"