And*_*yan 21 windows csv r utf-8 read.table
我有一个.csv文件,其中包含以下数据:
"?","?"
1,10
2,20
Run Code Online (Sandbox Code Playgroud)
我无法将其读入R中,以便列名显示在文件中.
d <- read.csv("./Data/1.csv", fileEncoding="UTF-8")
head(d)
Run Code Online (Sandbox Code Playgroud)
产生以下内容:
> d <- read.csv("./Data/1.csv", fileEncoding="UTF-8")
Warning messages:
1: In read.table(file = file, header = header, sep = sep, quote = quote, :
invalid input found on input connection './Data/1.csv'
2: In read.table(file = file, header = header, sep = sep, quote = quote, :
incomplete final line found by readTableHeader on './Data/1.csv'
> head(d)
[1] X.
<0 rows> (or 0-length row.names)
Run Code Online (Sandbox Code Playgroud)
同时,在不指定fileEncoding的情况下执行相同操作会产生以下结果:
> d <- read.csv("./Data/1.csv")
> head(d)
Ô. Ô²
1 1 10
2 2 20
Run Code Online (Sandbox Code Playgroud)
当我运行"文件"实用程序来找出文件的编码时,它说它是UTF-8:
Data\1.csv: UTF-8 Unicode text, with CRLF line terminators
Run Code Online (Sandbox Code Playgroud)
我使用的是RStudio,Windows 7,R版本2.15.2,32位.
提前致谢.
pus*_*t88 11
我在这里写了一个更长的答案:Windows上的R:字符编码地狱.
快速回答,使用参数编码而不是fileEncoding应该解决您的第一个问题.您将无法在RStudio中的控制台或表视图中读取它,但您可以在公式中使用它.
d <- read.csv("./Data/1.csv", encoding="UTF-8")
head(d)
Run Code Online (Sandbox Code Playgroud)
将表保存为UTF-8文件:
> test2 <- read.csv("test2.csv", header = FALSE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "", encoding = "UTF-8")
Warning message:
In read.table(file = file, header = header, sep = sep, quote = quote, :
incomplete final line found by readTableHeader on 'test2.csv'
Run Code Online (Sandbox Code Playgroud)
这将为您提供在控制台和RStudio视图中的外观
> test2
V1 V2
1 <U+0531> <U+0532>
2 1 10
3 2 20
Run Code Online (Sandbox Code Playgroud)
但是重要的是你可以在R中操作它.因此在我的情况下,可以看到脚本窗口输入Ա具有UTF-8编码,并且grep在表中正确地找到了这种编码.
> Encoding("?")
[1] "UTF-8"
> grep("?", as.character(test2[1,1]))
[1] 1
Run Code Online (Sandbox Code Playgroud)
您可能需要找到适合您的设置的合适编码变体,或者可能更改它们.不幸的是,我不确定它在哪里完成.
您可能无法在所有阶段使其变得漂亮,但绝对有可能在Windows 7环境中使其工作.
我尝试了两种方法来重现您的问题。
\n\n我将上面的字符复制到 RStudio 中,并使用以下代码将其保存到 csv 中:
\n\nwrite.csv(c("\xd4\xb1","\xd4\xb2",\n 1,10,\n 2,20), "test.csv")\n\ndf <- read.csv("test.csv")\nRun Code Online (Sandbox Code Playgroud)\n\n这很好用。
\n\n然后我想,当我用 R 将其保存到 CSV 时,也许 R 正在作弊?所以我只是将字符粘贴到文本文件中并将其另存为 CSV。这种方法也没有问题。
\n\n这是我的会话信息:
\n\nsessionInfo()\nR version 3.0.1 (2013-05-16)\nPlatform: x86_64-pc-linux-gnu (64-bit)\n\nlocale:\n[1] LC_CTYPE=en_CA.UTF-8 LC_NUMERIC=C LC_TIME=en_CA.UTF-8 \n[4] LC_COLLATE=en_CA.UTF-8 LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8 \n[7] LC_PAPER=C LC_NAME=C LC_ADDRESS=C \n[10] LC_TELEPHONE=C LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C \n\nattached base packages:\n[1] stats4 grid stats graphics grDevices utils datasets methods base \n\nother attached packages:\n[1] party_1.0-9 modeltools_0.2-21 strucchange_1.4-7 sandwich_2.2-10 zoo_1.7-10 \n[6] GGally_0.4.4 reshape_0.8.4 plyr_1.8 ggplot2_0.9.3.1 \n\nloaded via a namespace (and not attached):\n[1] coin_1.0-23 colorspace_1.2-2 dichromat_2.0-0 digest_0.6.3 \n[5] gtable_0.1.2 labeling_0.2 lattice_0.20-23 MASS_7.3-29 \n[9] munsell_0.4.2 mvtnorm_0.9-9995 proto_0.3-10 RColorBrewer_1.0-5\n[13] reshape2_1.2.2 scales_0.2.3 splines_3.0.1 stringr_0.6.2 \nRun Code Online (Sandbox Code Playgroud)\n