R语言数据输入之2:从Excel导入

软件技巧 7个月前 (02-02) 1,017 人围观 0

R语言作为数据分析数据挖掘的利器,第一步要解决的便是如何高效地把数据导入进来。

输入数据挺方便,但当数据量比较大的时候,通过在命令窗口中逐一将数据录入的方法(R语言学习之输入的输入与调用(1))看似是效率低下的,那么,当我已经有了比较大规模的数据,如何导入到R语言中呢?

这里分享两种不错的方法:

从csv文件导入

csv是一个标准格式的,以逗号分隔数据的数据“中转格式”,非常适合将数据导入到R中。基本的步骤就是:在Excel编辑数据>另存为csv格式>在R语言中导入

做一个实例,在excel中做这样的表格,然后另存为aa.csv到工作目录

data1 <- read.table(“aa.csv”,header=TRUE,sep=”,”)

data1

id x y
1 1 5 6
2 2 8 8
3 3 6 7
4 4 3 5
5 5 5 1
6 6 7 3
7 7 4 8
8 8 1 7
9 9 2 4
10 10 9 5

已经可以成功地把数据导入进来了,注意这个命令有相当多的参数设置,全部参数可以通过help(read.table)查看。

file:文件名或包含文件名的路径,默认文件的位置在工作目录里,记得file两侧要带上双引号哦。文件的绝对路径,一定要是这样的:C:\\desktop\\aa.csv,否则R语言不认识的。为了避免路径输入错误,可以用file.choose()函数代替,这样会弹出一个对话框,指定文件

header:TRUE或者FALSE,表明首行是否带有变量名。一个简单的判断依据是:只有当header=TRUE时,导入进来的第一行数据数量才会=总的列数-1。

sep:分隔符,默认是空格,如果你有含有空字段的制表符分割的文件,一定要使用 sep=”\t”

quote:有时候字符串中包含引号,quote可以设置R把什么字符当做是引号,默认是双引号

dec:小数点格式,默认是“.”,不过有些国家是把逗号当做逗点来用的

numerals:如果数据中的小数点位数太多,多于双精度的要求时,用这个参数控制精度损失,numerals可以=allow.loss、warn.loss、warn.loss

row.names:设置行名称,可以设置成字符,也可以设置成数字,用以制定行名称在第几列

col.names:设置列名称,默认是V1、V2、V3……

as.is:设置每列的数据类型

还有,如果数据中含有空白字符,则可以用 fill = TRUE来排除字符尾部的空白,用strip.white = TRUE来去掉字符中间的空白。

从Excel文件导入

读取Excel文件最好的方式,就是上述的读取csv

理由有几点:

1.R语言直接读取Excel文件需要额外的插件

install.packages(“RODBC”)

运行上面这段命令,安装读取office文件的RODBC包

2.读取的命令比较复杂,不容易记忆

3.用ODBC读取Excel的命令,只能用于32位系统中,这个尴尬了,我是64位win8.1,看来是连做个例子试试看的机会都木有了。

不过呢,感谢MiltonDeng提供的总结:http://blog.sina.com.cn/s/blog_6f194ed30101blpy.html

在R里连接ODBC要用到RODBC这个包:

library(RODBC)

然后

conn <- odbcConnectAccess2007(access.file=”D:/Data/data.accdb”,uid=”test”,pwd=”test”)

industries <- sqlQuery(channel=conn,query=”SELECT DISTINCT Indcd FROM Company”)[[1]]

创建一个通道conn连接到Access2007文件data.accdb。然后用sql索引语言选取数据。

sqlQuery(channel,query),第一个参数为通道名(此处为刚才创建的conn);query为索引语句,索引语法为sql语言,其中SELECT DISTINCT 列名称 FROM 表名称,即选取出表Company中Indcd列中所有非重复值。

不过这里一开始我遇到了一点问题,以64bit的R运行时,一直会提示:

Warning messages:

1: In odbcDriverConnect(con, …) :

[RODBC] ERROR: state IM002, code 0, message [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

2: In odbcDriverConnect(con, …) : ODBC connection failed

并且64bit管理数据源ODBC时Access源也会出现加载问题。最后用32bit运行不会出现这个问题,具体原因不太清楚,如果有类似问题的话,直接用32bit的R运行就可以了。在控制面板->管理工具->数据源中可以直接修改64bit的ODBC配置。

64bit系统中32bit的ODBC通常会配置好Access的源。64位系统中修改32bit的ODBC的路径在C:\Windows\SysWOW64\odbcad32.exe。

看来,只有在处理海量数据,不得不使用数据库的时候,才会用到RODBC,待我用到的时候再写写笔记。