23
2017
10

R读取文件的几个常错的问题

 

 R读取文件的几个常错的问题

相信很多R用户在读入数据时都碰到过数据读入出错的问题。出错的原因很多,但是90%以上的原因主要是编码和TAB分隔问题。尤其容易出现在不同语言环境和操作系统中。

(一)编码问题

 首先了解一下编码问题。编码问题或者乱码问题主要是由于不同语言转换所造成的。由于计算机最早诞生于西方,西方的语言主要是拉丁字符,有一个标准的编码ISO-8859系列,仅支持西方拉丁字符,并不包含中文字符。西方很多软件的开发都是基于该系列,当使用中文字符的时候往往会出现乱码问题。为了解决不同文字的编码问题,计算机界在国际上的支持主要通过Unicode系列编码进行的,就是统一编码的意思。Unicode有很多变种,其中常见的就是UTF-8编码,UTF-16UTF-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编码,点击另存为,然后选取UTFtxt)格式保存。

现在再运行如下代码:

> 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数据科学》.电子工业出版社(即将出版,敬请期待).

 

« 上一篇 下一篇 »