当我使用 read_csv 读取 .csv 文件时遇到一个奇怪的问题。恐怕我认为我无法生成一个可重现的示例,因为问题可能涉及我当前的 R/RStudio 会话以及它们在读取文件时如何交互,需要文件和类似的设置。 我不确定,但我倾向于文本编码不匹配的一些问题,但我对此知之甚少,因此我寻求堆栈溢出蜂巢思维的高级建议。
无论如何,这就是我的行为。
该标题名为“fl”,包含美国所有行政区的 FIPS 代码。我以阿拉斯加的“人口普查区”为例,但同一标题中还有其他类似的情况。
以下内容会产生合理的输出。
> fl %>% filter(str_detect(fl$NAME, 'Hoonah'))
# A tibble: 1 × 6
FIPS NAME STATEFPn COUNTYFPn STATEFP COUNTYFP
<chr> <chr> <int> <int> <chr> <chr>
1 02105 Hoonah–Angoon Census Area 2 105 02 105
但是,如果我执行以下操作,通过在控制台提示符下键入整个名称,我什么也得不到。
> fl %>% filter(NAME=='Hoonah-Angoon Census Area')
# A tibble: 0 × 6
# … with 6 variables: FIPS <chr>, NAME <chr>, STATEFPn <int>, COUNTYFPn > <int>, STATEFP <chr>,
# COUNTYFP <chr>
# ℹ Use `colnames()` to see all variable names
但是,如果我从第一个输出中复制并粘贴,它就会起作用并且我得到了这个。
> fl %>% filter(NAME=='Hoonah–Angoon Census Area')
# A tibble: 1 × 6
FIPS NAME STATEFPn COUNTYFPn STATEFP COUNTYFP
<chr> <chr> <int> <int> <chr> <chr>
1 02105 Hoonah–Angoon Census Area 2 105 02 105
我有一些怀疑,这与我的 RStudio 会话和文件中的内容之间的某种字符编码问题/不匹配有关,尽管事实是,据我所知,文件(由guess_encoding()检查)和我的会话(如“文件:使用编码保存”中设置,然后使用“文件:使用编码重新打开”)都读取“UTF-8”。
对正在发生的事情有什么想法吗?
您的问题与编码没有太大关系,即使使用相同的编码,也有一些字符看起来与眼睛相似,但有所不同。 在你的情况下,破折号。 在第一种情况下,您有一个连字符,在第二种情况下,您有一个破折号。
fl$NAME <- gsub("–", "-", fl$NAME)
以下内容会将文本中的破折号转换为连字符,因此您可以像以前一样自由键入连字符,并且它应该匹配。