R:将 "special"字母转换为 UTF-8?

标签 r utf-8 character string-formatting

我在匹配表时遇到问题,其中一个数据帧包含特殊字符,而另一个数据帧不包含特殊字符。示例:Doña Ana County 与 Dona Ana County

这是一个可以重现输出的脚本:

library(tidyverse)
library(acs)
tbl_df(acs::fips.place)    # contains "Do\xf1a Ana County"
tbl_df(tigris::fips_codes) # contains "Dona Ana County"

示例:

tbl_df(tigris::fips_codes) %>% filter(county == "Dona Ana County")

返回:

# A tibble: 1 x 5
  state state_code state_name county_code          county
  <chr>      <chr>      <chr>       <chr>           <chr>
1    NM         35 New Mexico         013 Dona Ana County

不幸的是,以下查询没有返回任何内容:

tbl_df(acs::fips.place) %>% filter(COUNTY == "Do\xf1a Ana County")
tbl_df(acs::fips.place) %>% filter(COUNTY == "Doña Ana County")
tbl_df(acs::fips.place) %>% filter(COUNTY == "Dona Ana County")

# A tibble: 0 x 7
# ... with 7 variables: STATE <chr>, STATEFP <int>, PLACEFP <int>, PLACENAME <chr>, TYPE <chr>, FUNCSTAT <chr>, COUNTY <chr>

但是,当在 R Studio 中打开数据框时,它显示:

Special characters

问题 1:为什么第二个查询没有返回结果,尽管数据库中出现了“Do\xf1a Ana County”?

问题 2:如何将所有“特殊”字符(例如 ñ)转换为 n 或类似字符(UTF-8?) ?是否有一个库或片段,或者在标题中定义,而不是为每个字符定义规则?无论如何,我必须这样做才能匹配两个表中的某些列。

谢谢!

最佳答案

使用

 tbl_df(acs::fips.place) %>% filter(COUNTY == "Do\\xf1a Ana County")

在您的数据集中,您真正拥有的是 Do\\xf1a 您可以在 R 控制台中使用以下命令进行检查:

acs::fips.place[grep("Ana",f$COUNTY),]

要使用的函数是 iconv(x, from = "", to = "")enc2utf8enc2native 不接受“from”参数。 在大多数情况下,要构建包,您需要将数据转换为 UTF-8(构建包时我必须对所有法语字符串进行转码)。这里我认为它是latin1,但是\已经被转义了。

x<-"Do\\xf1a Ana County"
Encoding(x)<-"latin1"
charToRaw(x)
#  [1] 44 6f f1 61 20 41 6e 61 20 43 6f 75 6e 74 79
xx<-iconv(x, "latin1", "UTF-8")
charToRaw(xx)
# [1] 44 6f c3 b1 61 20 41 6e 61 20 43 6f 75 6e 74 79

最后,如果您需要清理输出以获得可比较的字符串,您可以使用此函数(直接来 self 自己的编码 hell )。

to.plain <- function(s) {   
   #old1 <- iconv("èéêëù","UTF8") #use this if your console is in LATIN1
   #new1 <- iconv("eeeeu","UTF8") #use this if your console is in LATIN1
  old1 <- "èéêëù"
  new1 <- "eeeeu"
  s1 <- chartr(old1, new1, s)      
}

关于R:将 "special"字母转换为 UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47738955/

相关文章:

java - XML 编码 - 使用 UTF-8 格式的 Xstream 将文件中的 XML 文本转换为对象

C编程: How to program for Unicode?

mysql - 在mysql字符串函数中搜索特殊字符

r - 仅设置一种美学显示在 ggplot2 图例中

r - 如何做 R 包括

r - 如何在R 2.15中阅读.jpeg

r - tm 包函数在清理语料库时没有删除引号和连字符

python - 如何在 python 2.5 中将 UTF8 字符串转换为 HTML 字符串以正确显示重音?

java - 在 Java 中将随机字符放置在数组板上

swift - 如何有效地比较 Swift 中的字符