R语言数据分析从入门到高级:(四)文件读取、导入和复制

R语言数据分析

参考资料:
Data Analysis and Prediction Algorithms with R

文章目录

    • R语言数据分析
  • 4.数据导入
    • 4.1 路径和工作目录
      • 4.1.1 文件系统
      • 4.1.2 相对路径和绝对路径
      • 4.1.3 工作路径
      • 4.1.4 生成路径名
      • 4.1.5 复制文件
    • 4.2 reder和readxl库
      • 4.2.1 readr
      • 4.2.2 readxl
    • 4.3 读取网络文件

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
state abb region population total
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.


你可能感兴趣的:(R语言数据分析和预测,R语言数据分析,R语言文件读取,文件复制)