【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)
  1. 'data'
  2. 'DESCRIPTION'
  3. 'extdata'
  4. 'help'
  5. 'html'
  6. 'INDEX'
  7. 'MD5'
  8. 'Meta'
  9. 'NAMESPACE'
  10. 'R'
  11. '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)
  1. 'state,abb,region,population,total'
  2. 'Alabama,AL,South,4779736,135'
  3. '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)
A tibble: 6 × 5
stateabbregionpopulationtotal
<chr><chr><chr><dbl><dbl>
Alabama ALSouth 4779736 135
Alaska AKWest 710231 19
Arizona AZWest 6392017 232
Arkansas ARSouth 2915918 93
CaliforniaCAWest 372539561257
Colorado COWest 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.


posted @ 2022-08-27 11:08  JOJO数据科学  阅读(1788)  评论(0编辑  收藏  举报