r 语言读取excel文件,r语言如何读取excel

导读:本文将讨论Excel、PDF等文件的读?。?以及相应函数的参数设置 。
下图总结了主要程序包,希望读者在日常练习和工作中遇到不同格式的文件时,能够瞬间反应出读取该格式所需的包及对应的函数 。(限于篇幅,本文未包含图中“平面文档格式”这部分的内容,如果你有兴趣 , 可以继续关注大数据后续文章 。)


r 语言读取excel文件,r语言如何读取excel

文章插图
▲不同格式的数据文件读取所用的R包
01 readxl:Excel文件读取
readxl是微软Excel文件读取的必备R包,是Hadley Wickham、Jennifer Bryan以及其他6名成员合作完成的经典程序包之一 。
值得一提的是 , 该包的开发者之一兼实际维护者Jennifer Bryan(网络上多称她为Jenny Bryan),可以称得上是与Hadley齐名且为数不多的女性R语言神级人物 。可能是因为其身为大学教授,因此她总能够用很生动有趣的方式将复杂的问题简化成通俗易懂的知识传递给“小白”,强烈建议有英文基础的读者能够搜集一些她的主题演讲或者书籍 。
更新后的readxl包中虽然也还是只有5个函数,不过功能却比以前的版本更强大了 。对于起初的版本,数据会被读取成常见的data.frame格式,而对于现在的版本,读取后的数据集格式则为tibble,可以理解为提升版的data.frame 。
readxl包括两个探测性函数excel_format和excel_sheets,一个引用例子的函数readxl_example,新加入的读取特定单元格的函数cell-specification以及最重要的read_excel函数 。本节将着重讨论read_excel的参数设置及用法技巧 。
数据导入函数read_excel主要参数及功能对照:
  • path
  • 数据文件路径+文件名,也可以是一个url
  • sheet
  • 工作表序号或名称,默认值为第一个工作表
  • range
  • 读取指定区间 , 可以限定函数读取原始Excel文件的范围,例如,“A1:D100”会读取这个区间中的所有单元格,包括空白单元格 。“工作表1!A1:D100”会读取名为“工作表1”中的该区间 。这个参数的优先级高于参数 'skip'、'n_max'、'sheet'
  • col_names
  • 该参数具有三个选择,具体如下 。
  • 1)为真(TRUE),原始数据文件的第一行被用作列名,且不在数据集内 。
  • 2)为假(FALSE) , 数据列名被自动赋值成X__1、X__2、X__3等 。
  • 3)自定义字符串向量传给参数 。此时字符串向量会被用作列名 , 而原数据文件的第一列将被保存到数据集的第一列 。如果有默认列名的话 , 则会发出警告 , 并自动赋值成X1、X2、X3等,但不会影响读取进程 。重复的列名也会发出警告,并且会在重复列名前加数字序号以做区分
  • col_types
  • 列数据类型 。可以有两种传参形式,具体如下 。
  • 1)NULL,默认值 。函数会自动解析每一列数据的类型 。
  • 2)指定变量类型 。字符串参照为:"skip"、"guess"、"logical"、"numeric"、"date"、"text"或"list" 。需要注意的是,如果仅指定一个数据类型(例如 , "numeric")那么所有的变量都会被读成字符型数据 。如果指定一列为"skip" , 那么这一列就不会被读取到R中来 。新增加的"list"属性对处理有经纬度的变量列将会有很大帮助
  • na
  • 原始数据文件中是否有一些字符需要用na来代替 。空白单元格被默认作为默认值
  • trim_ws
  • 每个数据值前后的空白是否处理掉 , 取值为真或假
  • skip
  • 是否跳过几行读取原始数据文件,默认取值为0,表示不跳过;可以传参任意数字
  • n_max
  • 最大读取行数
首先还是需要加载readxl包 。尽管Hadley从2017年开始就一直在网络上宣传这个包已经属于tidyverse的一部分,但用户还是必须手动单独加载这个包 。加载readxl包代码如下:
> library(readxl)readxl包自带示范文件,使用函数readxl_example可以查看文件名字,以及获取文件路径,代码如下:
> readxl_example() [1] "clippy.xls" "clippy.xlsx" "datasets.xls" "datasets.xlsx"[5] "deaths.xls" "deaths.xlsx" "geometry.xls" "geometry.xlsx"[9] "type-me.xls" "type-me.xlsx" 获取示例文件的路径,可以先复制readxl_example函数运行后的结果,然后将其粘贴到read_excel函数的path参数中 。
下面的代码演示函数嵌套的方法,这种嵌套的代码书写方式能够在一定程度上简化代码和减少命名中间产物的频率 。不过嵌套过多会使可读性变差,一般推荐只嵌套两层 。将读取后的数据保存在iris中,执行str函数之后将会发现除了经典的data.frame之外,数据集还有另外两种类别,tbl_df和tbl 。函数嵌套的示例代码如下:


推荐阅读