【R语言数据科学】:(四)文件读取、导入和复制
R语言数据分析
参考资料:
Data Analysis and Prediction Algorithms with R
文章目录
4.数据导入
我们之前使用的数据都是R语言内存储好的数据集,然而在实际应用时,我们需要从外部数据库、相关数据文件导入。目前,最常见的存储数据方式之一是通过电子表格。电子表格按行和列存储数据。它是数据框的文件版本。将这样的表保存到计算机文件时,需要定义列和值。
当使用文本文件创建电子表格时,就像使用简单的文本编辑器创建的电子表格一样,换行符表示新的一行,列用一些特殊的分隔符分开,例如,;空格等
在定义数据表时,要注意第一行包含列名,而不是数据。我们称之为标题,当我们从电子表格中读取数据时,重要的是要知道文件是否有标题。大多数读取函数都假设数据集有一个标题。要知道文件是否有表头,在读取之前先查看文件。但是不是所有的电子表格文件都是文本形式的,例如excel,csv等。本章将如何介绍这些数据的导入
# 导入相关库
library(tidyverse)
4.1 路径和工作目录
导入数据的第一步就是要知道数据存储的路径,也就是在哪个文件夹,这里我们看一下如何分析R内部数据的路径和工作目录
包含美国谋杀案数据的电子表格是dslabs软件包的一部分。下面几行代码将该文件复制到默认情况下R查找的文件夹中。
filename <- "murders.csv"
dir <- system.file("extdata", package = "dslabs")
fullpath <- file.path(dir, filename)
file.copy(fullpath, "murders.csv")
FALSE
上述代码复制了一个文件。‘murders.csv’,我们可以使用read_csv读取他
dat<-read_csv(filename)
Rows: 51 Columns: 5
-- Column specification ------------------------------------------------------------------------------------------------
Delimiter: ","
chr (3): state, abb, region
dbl (2): population, total
i Use `spec()` to retrieve the full column specification for this data.
i Specify the column types or set `show_col_types = FALSE` to quiet this message.
4.1.1 文件系统
您可以将计算机的文件系统视为一系列嵌套的文件夹,每个文件夹包含其他文件夹和文件。我们将包含所有其他文件夹的文件夹称为根目录。我们将当前所在的目录称为工作目录。因此,在文件夹中移动时,工作目录会发生变化:将其视为当前位置。
4.1.2 相对路径和绝对路径
文件路径是一个目录列表名,可以将其视为关于单击哪些文件夹以及按什么顺序查找文件的说明。如果这些说明是为了从根目录中查找文件,我们将其称为绝对路径。如果说明是从工作目录开始查找文件,我们将其称为相对路径。
下面来看一下绝对路径
system.file(package = 'dslabs')
‘C:/Users/DELL/Documents/R/win-library/4.0/dslabs’
用斜线分隔的字符串是目录名。第一个斜杠代表根目录,我们知道这是一个绝对路径,因为它以斜杠开头。如果第一个目录名前面没有斜杠,则路径是相对的。我们可以使用函数list.files以查看相对路径的示例。
dir <- system.file(package = 'dslabs')
list.files(path = dir)
- 'data'
- 'DESCRIPTION'
- 'extdata'
- 'help'
- 'html'
- 'INDEX'
- 'MD5'
- 'Meta'
- 'NAMESPACE'
- 'R'
- 'script'
如果我们使用绝对路径,这些相对路径给出了最后的位置。例如'data'
的绝对路径就是:
'C:/Users/DELL/Documents/R/win-library/4.0/dslabs/data'
4.1.3 工作路径
我建议大家在代码中最好使用相对路径。因为绝对路径是唯一的,并且我们希望代码是可移植的。通过使用getwd函数,可以获得工作目录的完整路径。
wd <- getwd()
wd
‘C:/Users/DELL/r语言学习/数据科学导论:基于R’
4.1.4 生成路径名
另一个获得绝对路径但是不需要写出全部路径的方法是使用file.path
filename <- 'murders.csv'
dir <- system.file('extdata',package='dslabs')
fullpath <- file.path(dir,filename)#file.path的左右是把两个文件连接在一起得到组合的路径
fullpath
‘C:/Users/DELL/Documents/R/win-library/4.0/dslabs/extdata/murders.csv’
system.file
给出了文件夹的绝对路径,其中包含了package参数。通过浏览dir中的列表文件,我们可以发现extdata中有我们想要的murders文件
filename %in% list.files(file.path(dir)) # 查看filename是否在extdata中
TRUE
4.1.5 复制文件
file.copy()
此函数接受两个参数:要复制的文件和在新目录中为其指定的名称。
file.copy(fullpath, "murders.csv")
FALSE
4.2 reder和readxl库
在本节中,我们主要讨论tidyverse数据导入功能。利用murders数据集。以dslabs包提供的csv文件为例。
filename <- "murders.csv"
dir <- system.file("extdata", package = "dslabs")
fullpath <- file.path(dir, filename)
file.copy(fullpath, "murders.csv")
FALSE
4.2.1 readr
readr库包含将文本文件电子表格中存储的数据读取到R中的功能。readr是tidyverse软件包的一部分,也可以直接加载:
library(readr)
Function Format 后缀
read_table 空格分隔 txt
read_csv 逗号分隔 csv
read_csv2 分号分隔 csv
read_tsv 制表符分隔 tsv
read_delim 通用文本格式,要指定分隔符 txt
虽然后缀通常告诉我们它是什么类型的文件,但不能保证它们总是匹配的。我们可以打开文件查看,也可以使用函数read_lines查看几行
read_lines('murders.csv',n_max=3)
- 'state,abb,region,population,total'
- 'Alabama,AL,South,4779736,135'
- 'Alaska,AK,West,710231,19'
同时可以看出数据有一个标题。现在我们使用read_csv读取:
dat <- read_csv(filename)
Rows: 51 Columns: 5
-- Column specification ------------------------------------------------------------------------------------------------
Delimiter: ","
chr (3): state, abb, region
dbl (2): population, total
i Use `spec()` to retrieve the full column specification for this data.
i Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(dat)
state | abb | region | population | total |
---|---|---|---|---|
<chr> | <chr> | <chr> | <dbl> | <dbl> |
Alabama | AL | South | 4779736 | 135 |
Alaska | AK | West | 710231 | 19 |
Arizona | AZ | West | 6392017 | 232 |
Arkansas | AR | South | 2915918 | 93 |
California | CA | West | 37253956 | 1257 |
Colorado | CO | West | 5029196 | 65 |
4.2.2 readxl
library(readxl)
主要有以下几个函数:
Function Format 后缀
read_excel auto detect the format xls, xlsx
read_xls original format xls
read_xlsx new format xlsx
Microsoft Excel格式允许在一个文件中包含多个电子表格。这些被称为sheet。上面列出的函数默认读取第一页,但我们也可以读取其他的。excel_sheets函数为我们提供excel文件中所有工作表的名称。然后,可以将这些名称传递给上述三个函数中的sheet参数,以读取除第一个以外的工作表。
4.3 读取网络文件
另一个常见的数据互联网数据。当这些数据存在文件中时,我们可以下载它们,然后导入它们,甚至可以直接从网络上读取它们。例如,dslab包位于GitHub上,所以我们随包下载的文件有一个url:
url <- "https://raw.githubusercontent.com/rafalab/dslabs/master/inst/
extdata/murders.csv"
dat <- read_csv(url)
Rows: 1 Columns: 1
-- Column specification ------------------------------------------------------------------------------------------------
Delimiter: ","
chr (1): https://raw.githubusercontent.com/rafalab/dslabs/master/inst/
i Use `spec()` to retrieve the full column specification for this data.
i Specify the column types or set `show_col_types = FALSE` to quiet this message.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探