我在R中遇到一个带有字符类型变量的问题.我在数据框中的变量有这样的结构:
X1
ANGLO AUTOMOTRIZ S.A. MATRIZ
AUTOMOTORES Y ANEXOS / AYASA
ECUA - AUTO S.A. MATRIZ
METROCAR S.A. 10 DE AGOSTO
MOSUMI LA "Y"
Run Code Online (Sandbox Code Playgroud)
我的问题是我想要一个没有的新变量./-"",字符串必须组成一个没有空格,如下所示:
X2
ANGLOAUTOMOTRIZSAMATRIZ
AUTOMOTORESYANEXOSAYASA
ECUAAUTOSAMATRIZ
METROCARSA10DEAGOSTO
MOSUMILAY
Run Code Online (Sandbox Code Playgroud)
可以在R中做到这一点.谢谢.
Sim*_*lon 13
试试gsub......
gsub( "\\.|/|\\-|\"|\\s" , "" , df$X1 )
#[1] "ANGLOAUTOMOTRIZSAMATRIZ" "AUTOMOTORESYANEXOSAYASA" "ECUAAUTOSAMATRIZ"
#[4] "METROCARSA10DEAGOSTO" "MOSUMILAY"
Run Code Online (Sandbox Code Playgroud)
\\. - 匹配文字 .| - OR分隔符/- 匹配a /(不需要转义)\\- - 匹配文字 -\" - 匹配文字 "\\s - 匹配一个空格gsub贪婪,所以尝试尽可能多地匹配,并且它也被矢量化,所以你可以立即传递整个列.第二个参数是替换值,在本例中是替换值,它将""所有匹配的字符替换为空.
既然你也在处理重音字符,我可以想到两个选择:
iconv尝试"音译"重音字符的ASCII字符.这两个都是.对于这两个示例,我使用以下示例文本:
Z <- c("ANGLO AUTOMOTRIZ S.A. MATRIZ", "AUTOMOTORES Y ANEXOS / AYASA",
"ECUA - AUTO S.A. MATRIZ", "METROCAR S.A. 10 DE AGOSTO", "MOSUMI LA \"Y\"",
"distribuir contenidos", "proponer autoevaluaciones", "como buzón de actividades")
Run Code Online (Sandbox Code Playgroud)
选项1:请注意,重音"ó"将在最后一项中删除.
gsub("[^[:ascii:]]|[[:punct:]]|[[:space:]]", "", Z, perl=TRUE)
# [1] "ANGLOAUTOMOTRIZSAMATRIZ" "AUTOMOTORESYANEXOSAYASA" "ECUAAUTOSAMATRIZ"
# [4] "METROCARSA10DEAGOSTO" "MOSUMILAY" "distribuircontenidos"
# [7] "proponerautoevaluaciones" "comobuzndeactividades"
Run Code Online (Sandbox Code Playgroud)
选项2:注意"ó"已转换为"o"
gsub("[[:punct:]]|[[:space:]]", "", iconv(Z, to = "ASCII//TRANSLIT"))
# [1] "ANGLOAUTOMOTRIZSAMATRIZ" "AUTOMOTORESYANEXOSAYASA" "ECUAAUTOSAMATRIZ"
# [4] "METROCARSA10DEAGOSTO" "MOSUMILAY" "distribuircontenidos"
# [7] "proponerautoevaluaciones" "comobuzondeactividades"
Run Code Online (Sandbox Code Playgroud)
笔记:
[[:punct:]]和[[:space:]].perl = TRUE识别[[:ascii:]]字符类.^选项1中的意思是"不"(这样,你可以把它读作"发现了什么,是不是一个ASCII字符,这是一个空间,或者说是一个标点符号,用什么替代它).