我正在尝试读取包含用挪威语编写的问卷数据的 CSV 文件。所以这个文件包含字母 Æ Ø Å,但是 R 似乎不能很好地处理这些字母,它们都显示为问号。
我用它来读取数据:
data <- read.csv2("Responser - Vasket - 20.06.2013.csv")
我应该使用任何选项让 R 知道我有特殊字符吗?
我在 Windows 7 上使用 Rstudio。
我正在尝试读取包含用挪威语编写的问卷数据的 CSV 文件。所以这个文件包含字母 Æ Ø Å,但是 R 似乎不能很好地处理这些字母,它们都显示为问号。
我用它来读取数据:
data <- read.csv2("Responser - Vasket - 20.06.2013.csv")
我应该使用任何选项让 R 知道我有特殊字符吗?
我在 Windows 7 上使用 Rstudio。
您需要将fileEncoding
参数指定为read.csv2
(不是以及 (?) encoding
)。
在使用 R 之前,最好使用文本编辑器检查文件的编码是什么。例如,如果您在 Notepad++ 中打开文件,“编码”菜单可让您查看和更改字符编码。在 TextPad 中,您可以从 Save As.. 对话框更改编码。大多数文本编辑器都会有这样的功能。
这是您需要传递给的值fileEncoding
;如果还没有,您不能只将文件声明为 UTF-16。这就是你收到警告的原因。
鉴于我的 R 版本和设置,这对我有用:
在记事本中,我检查 csv 文件是否使用“编码:ANSI”保存。
在 RStudio 中:工具/选项/默认文本编码:ISO8859-1
我尝试使用这样的虚拟数据:
dd <- data.frame(area = c("øø", "åå", "ææ"), site = c("åå", "ææ", "øø"))
write.csv2(x = dd, file = "åæø.csv", row.names = FALSE)
dd2 <- read.csv2(file = "åæø.csv")
all.equal(dd, dd2)
sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=Norwegian (Bokmål)_Norway.1252 LC_CTYPE=Norwegian (Bokmål)_Norway.1252
[3] LC_MONETARY=Norwegian (Bokmål)_Norway.1252 LC_NUMERIC=C
[5] LC_TIME=Norwegian (Bokmål)_Norway.1252
getOption("encoding")
[1] "native.enc"
编辑来自@Ole Henrik Skogstrøm 8 月 7 日 7:57 的以下评论
来自@Ole Henrik Skogstrøm 的评论“如果我......在 Rstudio 中使用 view 命令,这个错误仍然存在”和“如果我只是输入它并将结果放在控制台中它可以工作”显示原始中给出的信息职位是不够的。
我上面的回答适用于实际提出的原始问题:将特殊字符读入 R。什么不起作用,并且在 OP 中未指定,是RStudio 中的对象“ View
-ing”错误地显示æøå。从控制台运行View(dd)
(dd
见上面的虚拟数据)和单击“工作区窗格”中的对象时,æøå 在数据查看器中显示为“黑色菱形问号”。
另一方面,如果您只使用 RGui,而不使用 RStudio,View(dd)
则可以在数据查看器中正确显示字符。
因此,这似乎不是将æøå 读入 R 的问题,而是View
在 RStudio 中对它们进行 -ing 的问题。另请参阅有关 RStudio 支持的这篇文章。
Hei Henrik,当包含ØÆÅ的csv文件(由Excel生成)时,我遇到了同样的问题,在R中打开它们会将挪威字母显示为黑色菱形,中间有一个白色问号。对我来说,问题肯定是基于编码的,但是我无法成功使用“编码”或“文件编码”来正确打开它们。
我通过在记事本中打开 csv 然后将其转换为文本文件并将编码从“ANSI”更改为“UTF-8”来解决系统上的问题。请参阅示例。
以下链接包含两个由 excel 创建的 csv 文件,一个以 MS-DOS 编码(名称 CSV MSDOS)编码,另一个以“逗号分隔”(名称 CSV)样式编码
https://drive.google.com/folderview?id=0BzoGQiFdDwiNNm02UnNLVVNja3c&usp=sharing
在记事本中打开它们应该显示 MS-DOS 版本的字母表示不正确(因此可以忽略),而“逗号分隔”版本的表示正确。将“Names CSV”文件保存为编码为“UTF-8”并称为“Names CSV UTF8”的文本文件。将 R 中的工作目录设置为文件所在的文件夹并运行以下代码。
test1 <- read.csv2("Names CSV.csv")
test2 <- read.csv2("Names CSV UTF8.txt")
test1 应该显示带有问号的黑色菱形 test2 应该正确显示名称。
我认为以前的答案可能不起作用,因为该表是由 R 创建的,并且 R 设置了字符编码,而我遇到的问题,我相信你也有一个不同的系统软件一直在设置编码。
如果您有很多文件要处理,这个解决方案不是很有用,但这至少是一个开始。