我遇到了一个问题,即在匹配包含特殊字符的数据框和不包含特殊字符的数据框时无法匹配。例如: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中打开数据框时,它显示: 问题1:为什么第二个查询没有返回结果,尽管“Doña Ana County”出现在数据库中? 问题2:我该如何将所有“特殊”字符(例如ñ)转换为n或类似字符(UTF-8?)?是否有库或片段可用于此操作,或者在头文件中定义,而不是为每个字符定义规则?无论如何,我都必须这样做才能匹配两个表中的某些列。谢谢!
acs::fips.place
的编码已经损坏,\\xf1a
并没有意义;\xf1a
有(在latin1
编码下),但是从一个编码转换到另一个编码是困难的。如果我是你,我会向acs
包的维护者报告一个 bug。 - Ista