R读取文件的几个常错的问题
相信很多R用户在读入数据时都碰到过数据读入出错的问题。出错的原因很多,但是90%以上的原因主要是编码和TAB分隔问题。尤其容易出现在不同语言环境和操作系统中。
(一)编码问题
首先了解一下编码问题。编码问题或者乱码问题主要是由于不同语言转换所造成的。由于计算机最早诞生于西方,西方的语言主要是拉丁字符,有一个标准的编码ISO-8859系列,仅支持西方拉丁字符,并不包含中文字符。西方很多软件的开发都是基于该系列,当使用中文字符的时候往往会出现乱码问题。为了解决不同文字的编码问题,计算机界在国际上的支持主要通过Unicode系列编码进行的,就是统一编码的意思。Unicode有很多变种,其中常见的就是UTF-8编码,UTF-16。UTF-8编码是很多操作系统的默认编码,比如Uninx / Linux / Mac OSX等。中文Windows当然也支持这种编码,但UTF-8并不是默认的编码。
比如我要读入csv格式的数据,数据如下:
但当我输入R代码时:
> dat_ID <- read.csv ( file = "dataID.csv" , header = T , sep = ";" ) Error in type.convert(data[[i]], as.is = as.is[i], dec = dec, numerals = numerals, : '<ca><c7>'多字节字符串有错 |
结果出错,显示“多字节字符串有错”,这个就是典型的编码问题。这个时候我们可以把.csv格式转成UTF编码,点击另存为,然后选取UTF(txt)格式保存。
现在再运行如下代码:
> dat_ID <- read.table ( file = "dataID2.txt" , header = T , sep = "\t" , fileEncoding = "UTF-16" ) |
此时就可以成功读取了。
(二)分隔符问题
用R读入数据时,读入的时候没显示出错,数据是读进去了,但是把数据捞出来看时,却发现问题了,数据没有自动分列,而成一整行的。也就是说数据没有分开,这就是分隔符的问题。
比如:
> dat <- read.csv ( file = "DATA2013.csv" , header = T , sep = ";" ) > dim ( dat ) [1] 1289 1 > head ( dat ) X.ID.V3.V11.V13.V19.V20.V25.V27.V31.V39.V40.V41.V42.V43.V44.V48.V49.V50.V52.V54.V55.V56.V57.V58.V59.V60.V61.V64.V65.V66.V67.V68.V70.V71.V72.V73.V74.V75.V76.V77.V78.V79.V80.V81.V82.V83.V84.V85.V86.V87.V88.D2013.y11,000002.SZ,33267,9676185190,9700013451,8057090424,87.8458,14.7,22.3,741806,0.9481,20812392740,2.14497e+11,6.4879,1.2955,23.7389,0.8578,88450200420,64698436105,7.3457,1.2143,1.37,6.98,0.175,12.2941,0.7368,21.4872,5.8383,4.2651,13.5118,99.8778,95.7421,0.4015,77.997,4.5448,92.2458,88.0021,1.3439,0.3372,0.1349,4.8607,11.7939,1143.6817,54.5437,0.3365,0.3166,0.3157,1.7055,20.1754,26.5056,26.5056,0.41,-19.3689 |
这是因为我们读取数据时,分隔符设置的有问题,查看文件发现分隔符是sep = ","而不是sep = ";"。更改后就可以成功读入数据了。
> dat <- read.csv ( file = "DATA2013.csv" , header = T , sep = "," ) > dim ( dat ) [1] 1289 53 > head ( dat ) X ID V3 V11 V13 V19 V20 V25 V27 V31 1 1 000002.SZ 33267 9676185190 9700013451 8057090424 87.8458 14.70 22.30 741806 2 2 000004.SZ 33252 83875459 83976684 61960792 99.8795 26.10 40.63 11817 3 3 000005.SZ 33217 913743007 914333607 729502562 99.9354 20.15 29.86 110257 4 4 000006.SZ 33721 1338241583 1349995046 656387519 99.1294 20.31 54.83 47038 5 5 000007.SZ 33707 184813141 230965363 144606915 80.0177 17.41 48.16 15074 6 6 000008.SZ 33731 147306236 303601640 113208274 48.5196 62.71 68.47 12563 |
关于数据的读入问题,看似是一个很简单的问题,但又是一个经常出错的问题。如果可以掌握数据读入的几个主要问题,总结出错的原因。可以让数据分析更加事半功倍!
以上内容摘自 方匡南.《R数据科学》.电子工业出版社(即将出版,敬请期待).