如何在一个字符串中删除特殊字符,空格和修剪R中的字符变量

时间:2013-09-06 14:41:48

标签: regex r

我在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"

我的问题是我想要一个没有./-""的新变量,并且必须将字符串分组为一个没有这样的空格:

X2
ANGLOAUTOMOTRIZSAMATRIZ
AUTOMOTORESYANEXOSAYASA
ECUAAUTOSAMATRIZ
METROCARSA10DEAGOSTO
MOSUMILAY

可以在R.谢谢。

2 个答案:

答案 0 :(得分:13)

试试gsub ...

gsub( "\\.|/|\\-|\"|\\s" , "" , df$X1 )
#[1] "ANGLOAUTOMOTRIZSAMATRIZ" "AUTOMOTORESYANEXOSAYASA" "ECUAAUTOSAMATRIZ"       
#[4] "METROCARSA10DEAGOSTO"    "MOSUMILAY"  
  • \\. - 匹配文字.
  • | - OR分隔符
  • / - 匹配/(无需转义)
  • \\- - 匹配文字-
  • \" - 匹配文字"
  • \\s - 匹配空白

gsub贪婪,所以尝试尽可能多地匹配,并且它也被矢量化,因此您可以立即传递整个列。第二个参数是替换值,在本例中为"",它将所有匹配的字符替换为空。

答案 1 :(得分:6)

既然你也在处理重音字符,我可以想到两个选择:

  1. 完全摆脱重音字符。
  2. 使用iconv尝试将重音字符“音译”为ASCII字符。
  3. 以下是两者。对于这两个示例,我使用以下示例文本:

    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")
    

    选项1:请注意,重音“ó”将被删除在最后一项中。

    gsub("[^[:ascii:]]|[[:punct:]]|[[:space:]]", "", Z, perl=TRUE)
    # [1] "ANGLOAUTOMOTRIZSAMATRIZ"  "AUTOMOTORESYANEXOSAYASA"  "ECUAAUTOSAMATRIZ"        
    # [4] "METROCARSA10DEAGOSTO"     "MOSUMILAY"                "distribuircontenidos"    
    # [7] "proponerautoevaluaciones" "comobuzndeactividades"   
    

    选项2:请注意,“ó”已转换为“o”

    gsub("[[:punct:]]|[[:space:]]", "", iconv(Z, to = "ASCII//TRANSLIT"))
    # [1] "ANGLOAUTOMOTRIZSAMATRIZ"  "AUTOMOTORESYANEXOSAYASA"  "ECUAAUTOSAMATRIZ"        
    # [4] "METROCARSA10DEAGOSTO"     "MOSUMILAY"                "distribuircontenidos"    
    # [7] "proponerautoevaluaciones" "comobuzondeactividades"  
    

    注意:

    • 为方便起见,我决定只使用字符类[[:punct:]][[:space:]]
    • 对于第一个选项,您需要perl = TRUE才能识别[[:ascii:]]字符类。
    • 选项1中的^表示“不”(因此,您可以将其读作“查找不是ASCII字符的任何内容,即空格,或者是标点符号,并将其替换为没有)。