• EXCEL 导入 R 的几种方法 R—readr和readxl包


    导入Excel数据至R语言的几种方法

    如有如下Excel数据源,如何将数据导入R语言呢?今天主要来介绍几种常见的方法;


    一、使用剪贴板然后使用read.table函数;

    首先选择Excel中的数据源,然后复制; 

    在Rstudio中输入如下脚本,回车即可; 

    read.table("clipboard", header = TRUE)

    注:header = TRUE,表示首行为标题行,若为FALSE则标题行也算在正文第一行,结果如下; 

    二、将Excel另存为csv文件,然后使用read.csv函数;

    打开Excel数据源,另存为example.csv文件;路径为【C:UsersAdministratorDesktopexample】


    然后在Rstudio中输入如下代码,回车即可:

    read.csv("C:/Users/Administrator/Desktop/example/example.csv", header = TRUE)

    这里的header参数与使用剪贴板中的header参数用法一致,在此不在赘述;

    注:在R中“”是一个转义字符,故需要将路径中的“”字符,使用“/”替代,或使用"\"替代; 

    三、将Excel另存为txt文本文件,然后使用read.table函数;

    打开Excel数据源,另存为example.txt文件;路径为【C:UsersAdministratorDesktopexample】


    然后在Rstudio中输入如下代码,回车即可;

    read.table("C:/Users/Administrator/Desktop/example/example.txt", header = TRUE)

    四、使用RODBC包(xls格式Excel文件)

    之前使用过RODBC包连接过Postgresql,回复【postgresql】可查看相关文章;这是里同样可以 使用RODBC中的odbcConnectExcel来创建与Excel的连接,获取Excel中的数据;

    > install.packages("RODBC")

    > library(RODBC)

    > conn <- odbcConnectExcel("C:/Users/Administrator/Desktop/example/example.xls")

    > sqlTables(conn)

    > sqlFetch(conn, "example")

    > sqlQuery(conn, "select * from [example$]")

    > odbcClose(conn)

    其中example.xls中一个Excel文件(2003版本格式),example是工作薄中要读取数据的工作表的名称,conn是一个由odbcConnectExcel()返回的RODBC连接对象,mydataframe是返回的数据框。注:RODBC也可用于从Access导入数据,具体可以查看help(RODBC)帮助;

    注:xlsx格式的Excel文件(2007、2010版)导入R语言会出错,可用xlsx包来读取这种格式的电子表格,脚本如下:

    > install.packages("xlsx")

    > library(xlsx)

    > workbook <- "C:/Users/Administrator/Desktop/example/example.xlsx"

    > mydataframe <- real.xlsx(workbook, 1)

    > mydataframe


    今天介绍了几种导入Excel中的数据至R语言中的方法,包括利用剪贴板、通过将Excel导入csv格式或txt格式的文件,以及利用RODBC包(或xlsx包)的方法;鉴于xls版本较为老旧,建议采取前三种方法导入Excel数据; 

    read.talbe以及read.csv及RODBC中相关函数的参数都很多,文章中只用了几个常见的参数,其余参数均采取了默认的设置,可利用?read.talbe或help(read.table)等语法来查询相关函数的具体帮助说明,例如使用?read.talbe语法查询帮助; 


    read.table的函数参数非常多,同时也会列出相关的函数,但最常用的也就几个,如下:

    read.table(file, header = FALSE, sep = "", quote = ""'",dec = ".", skip = 0,strip.white = FALSE, blank.lines.skip = TRUE,comment.char = "#")

    file,表示要读取的文件:file可以是①绝对路径或者相对路径,但是一定要注意,在R中“”是转义符,故路径需要写成“/”或者“\”; ②使用剪贴板;③使用file.choose(),弹出对话框,让你选择文件的位置。

    header,表示数据文件中第一行是不是标题。默认为F(FALSE),认为数据文件中无标题;

    sep,指定分隔符,默认是空格。quote是引号,默认是双引号。dec是小数点的表示,默认就是一个点。skip是确定是否跳过某些行。strip.white确定是否消除空白字符。blank.lines.skip确定是否要跳过空白行。comment.char指定用于表示注释的引导符号。

    将数据快速读入R—readr和readxl包

    大 数 据

    报道DT时代应用资讯及动态,爆料剖析行业热点新闻

    Hadley Wickham 和 RStudio团队写了一些新的R包,这些包对于每个需要在R中读入数据的人来说都是非常有用的。readr包提供了一些在R中读入文本数据的函数。readxl包提供了一些在R中读入Excel电子表格数据的函数。它们的读取速度远远超过你目前正在用的一些函数。

    readr包提供了若干函数在R中读取数据。我们通常会用R中的read.table家族函数来完成我们的数据读入任务。这里,readr包提供了许多替代函数。它们增加了额外的一些功能并且速度快很多。

    首先,read_table几乎代替了read.table。下面通过读取一个包含400万行的数据来比较它们的区别。点击这里下载该数据。

    注1:在演示之前简单说下我电脑的配置:win7,64位操作系统,8G内存,CPU A6双核。电脑配置不行,原文给出的实验时间甩了我好几条街。但不管怎样,在现有的条件下效率确实提高了很多。原文用时见末尾链接。

    注2:如果读取中文数据出现乱码,在编辑器设置下字符编码为"UTF-8"

    system.time(read_table("C:\Users\a\Desktop\biggerfile.txt",
                           col_names=c("DAY","MONTH","YEAR","TEMP")))
    
    system.time(read.table("C:\Users\a\Desktop\biggerfile.txt",
                           col.names=c("DAY","MONTH","YEAR","TEMP")))

    这些命令看上去非常相似,但是read.table花的时间是50.62秒,而read_table完成相同的任务只花了2.76秒。这是因为read_table把数据当做是固定格式的文件,并且使用C++快速处理数据。

    R中的基础包utils也有读取固定宽度数据的函数,下面的示例就能体现出readr的亮点:

    system.time(read_fwf("C:\Users\a\Desktop\biggerfile.txt", 
                          fwf_widths(c(3,15,16,12),
                          col_names=c("DAY","MONTH","YEAR","TEMP"))))
    
    system.time(read.fwf("C:\Users\a\Desktop\biggerfile.txt", 
                         c(3,15,16,12),
                         col.ames=c("DAY","MONTH","YEAR","TEMP")))

    readr包的read_fwf函数用时3.97秒,而标准的read.fwf函数耗时1372秒。

    readr包中的其它函数包括:read_csv读取逗号分隔的数据(欧洲用的是read_csv2函数),read_tsv读取制表符分隔数据,read_lines函数从文件中逐行读取数据(非常适合复杂的后期处理)。它还可以读取多种格式的日期时间列,智能的将文本数据读取为字符串(不再需要设置strings.as.factors=FALSE)。

    对于Excel格式的数据,这里有readxl包。这个包提供的函数可以读取.xls和.xlsx格式的Excel工作表。虽然这里没有演示read_execl函数的使用,但是它跟readr中的函数一样都是基于C++库的,因此读取速度应该也很快。最重要的是,它没有任何的外部依赖,因此你可以在任意平台上用它来读取数据—不要求安装了Excel。

    readr包已发布在CRAN上,readxl可以从github安装。

    github地址:https://github.com/hadley/readxl

  • 相关阅读:
    Java 8 的内存结构
    数据库锁和隔离级别
    MySQL中的where和having
    单例对象线程安全问题
    计算机速成课 第6集:寄存器 & 内存
    多叉树的深度优先和广度优先遍历
    javascript中异步任务的执行顺序
    错误:C2062:意外的类型"unsigned int"问题的排查
    键值类型QMap、QHash等区别
    qt中文不相等问题
  • 原文地址:https://www.cnblogs.com/think-and-do/p/6561905.html
Copyright © 2020-2023  润新知