我在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.谢谢。
答案 0 :(得分:13)
试试gsub
...
gsub( "\\.|/|\\-|\"|\\s" , "" , df$X1 )
#[1] "ANGLOAUTOMOTRIZSAMATRIZ" "AUTOMOTORESYANEXOSAYASA" "ECUAAUTOSAMATRIZ"
#[4] "METROCARSA10DEAGOSTO" "MOSUMILAY"
\\.
- 匹配文字.
|
- OR分隔符/
- 匹配/
(无需转义)\\-
- 匹配文字-
\"
- 匹配文字"
\\s
- 匹配空白 gsub
贪婪,所以尝试尽可能多地匹配,并且它也被矢量化,因此您可以立即传递整个列。第二个参数是替换值,在本例中为""
,它将所有匹配的字符替换为空。
答案 1 :(得分:6)
既然你也在处理重音字符,我可以想到两个选择:
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")
选项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:]]
字符类。 ^
表示“不”(因此,您可以将其读作“查找不是ASCII字符的任何内容,即空格,或者是标点符号,并将其替换为没有)。