【发布时间】:2018-05-24 03:37:58
【问题描述】:
我遇到了匹配表的问题,其中一个数据帧包含特殊字符而另一个不包含。示例:Do-安娜县 vs. 多纳安娜县
这是一个可以重现输出的脚本:
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 中打开数据框时,会显示:
问题一:为什么第二个查询没有返回,但数据库中出现了“Do\xf1a Ana County”?
问题 2: 如何将所有“特殊”字符(例如 ñ)转换为 n 或类似字符(UTF-8?) ?是否有为此的库或 sn-p,或标题中的定义,而不是为每个字符定义规则?无论如何,我都必须这样做才能匹配两个表中的某些列。
谢谢!
【问题讨论】:
-
问题是
acs::fips.place被严重破坏。\\xf1a没有任何意义;\xf1a确实(在latin1编码中),但是从一种转换到另一种很困难。如果我是你,我会向acs软件包维护者报告错误。
标签: r utf-8 character string-formatting