4 第三讲:如何导入数据

4.1 路径与工作目录

工作目录(working directory)是指当前的工作台(console)所进行交互的目录/文件夹,简而言之,即R会在其中寻找文件的文件夹。如果没有指定工作目录,R会默认使用用户文件夹作为工作目录。当打开R project时,R会自动将这个R Project 所在的目录作为工作目录,通常为用户文件夹。但是,如果数据文件不在用户文件夹中,那么需要告诉R去哪里找这些文件。这就是为什么我们需要设置工作目录。可以使用“get.wd”命令来查看当前的工作目录。

4.1.1 相对路径与绝对路径

建议为每一个数据分析项目设立一个文件夹,并在其中创建一个R项目。当每次打开项目时,它都会自动打开所在的位置。 路径是指文件(文件夹)所在位置,包含绝对路径和相对路径: 绝对路径相对路径

绝对路径指的是文件或文件夹在硬盘上的真实路径,而相对路径则是指相对于当前文件(或当前工作目录)的路径,如,(D:/Document/r_course/chapter_3/data)。 相对路径是相对于当前文件(或当前工作目录)的路径,如”data”或者”./data”。相对路径的好处在于,当复制整个文件夹时,相对路径的位置不会改变。 相对路径是相对于当前路径的位置,而绝对路径则是相对于硬盘的起始位置。

如果有一个子文件夹叫做data,那么它就是当前文件夹的子文件夹,也可以称为子目录,而当前文件夹则是它的父文件夹,也可以称为父目录。如果复制这个文件夹到另一个电脑上,它们之间的相对关系不会改变,但如果把它从D盘复制到E盘,那么绝对路径就会改变,相对路径仍然保持不变。因此,建议把所有文件都放在一个文件夹中,这样所有文件的相对路径都是相对于这个文件夹的,方便编写代码。如果文件夹放在不同的位置,每次引用或查找文件时都需要使用绝对路径,非常麻烦。

在Windows系统中,每个磁盘都有自己的盘符,例如C、D、E、F盘。绝对路径是从盘符开始一直写到当前文件夹,相对路径则是当前数据所存储的文件夹。由于Windows系统中可以分成三个盘,每个区都是自己的盘符,然后基于这个盘符又可以重新定义一个新的路径。也就是说,对于路径的定义是不太一样的。因此如果把所有的分析都放在一起的话,那么用相对路径是更好的。比如写代码时,不要把C盘D盘这些一整串写进来,如果换电脑,这个C盘可能会变成D盘,或者换成苹果系统,可能就没有C盘了,而是以“用户”开头。 对于Mac和Linux系统,它们只有一个根目录,没有盘符的概念。最常用的是“用户”,比如你的用户名,然后有一个“主目录”,这就是用户的文件夹。当使用苹果系统或者Linux系统时,基本上很多时候都是基于这个“用户”文件夹或者“users.html4c”进行操作。除了“主目录”以外,它可能还有一个“下载”,是下载的文件所放的位置,还可能有一个“图片”,包括所存的各种图等等,所以它是在一个文件夹下面有不同的子文件夹,比如有“etc”、“用户”还有其他的“根目录”等等。我们主要就是基于“用户”,然后建立自己的一系列的文件。

获取及修改工作目录的基本操作 查看当前工作目录:getwd() 修改当前工作路径:setwd(““)在引号里修改你的工作路径

4.1.2 Here包的使用

这是一个常用的包,包名叫做Here。Here这个包可以帮助方便快捷地去定位当前新的目录。使用后,能迅速获取项目的工作路径。它另外一个好处是不用考虑系统,直接能够把它的一系列文件夹调出来。

4.2 Windows系统中的地址栏和R中的地址栏斜线方向不同。如果直接复制Windows地址栏的地址作为绝对路径,可能会出现错误。为了避免手动拼接路径出错。

可以使用here函数来自动补全路径。这个函数会自动将当前文件夹的路径补全,只需要在路径中加入文件夹名即可。例如,可以使用here(“data”, “match”)来获取data文件夹下的match文件。这个小技巧可以帮助避免一些错误,特别是在不同电脑之间切换时。

4.3 读取数据

工作目录是R与硬盘交互的接口,可以使用getwd()函数来获取当前工作目录的绝对路径。使用相对路径来引用子文件夹的位置。接下来查看数据的相对路径和绝对路径。假设工作目录是在桌面上,数据存储在”data”文件夹中,其中包含两个子文件夹,一个是”match”,包含178个文件,另一个是”pengiun”,只有一个文件。相对路径中的一个点(.)代表当前文件夹,数据在”data”文件夹中,“match”文件夹下有178个文件。如果要读取某个文件,必须完整地写出文件名。对于”pengiun”文件夹,它的相对路径是”./data/pengiun”。

4.3.1 read.csv函数

了解数据的相对路径,可以使用”read.csv”函数来读取数据。需要给数据一个名称,例如”pengiun.data”,并使用”read.csv”函数来读取数据。在函数中,需要指定相对路径。这里建议使用相对路径而不是绝对路径,因为绝对路径需要每次更改代码。

“head = TRUE”是函数中的一个参数,用于指定文件是否包含列名。如果文件的第一行是列名,则将其设置为”TRUE”,否则为”FALSE”。在R语言中,假用false表示,真用true表示。读取这样的txt文件时,需要使用分隔符来分隔不同列的数据。为了更直观地了解这个过程,可以打开csv文件。虽然这是一个csv文件,但也可以使用txt打开,如果使用文本编辑器打开,数据看起来会很混乱,因为它包含换行符。

当使用函数读取时,行是自动识别的,而列必须使用分隔符来识别。在这里,使用逗号作为分隔符。这样,就可以将数据读取为行和列。可以使用data table包来方便地展示读取后的数据。为了方便在PPT中展示数据,可以使用head函数来大致地查看数据。读取数据后,按照逗号分隔后,第一行是列名,可以将其识别为表头。从第二行开始是数据,第一个列的第一个值是1975,后面是1995等等。这是一个问卷数据,每个编号代表一个问卷和其items。可以用不同的方式对其进行编号,比如uncertainty等等。

对于常用的数据文件,可以使用here来定义相对路径,然后使用import来读取数据。读取后,可以看到有247个变量。对于.out文件,可以使用read.csv来读取,但是需要将separator参数设置为斜杠加t,表示以tab为分隔符。在进行统计分析时,需要明确定义用于分割数据的符号。除了逗号和tab键,还可以使用分号、空格或分行符等多种方式。

read.csv是最常用的数据读取函数,但实际它是read.table的一个特殊形式。因此,也可以使用read.table来读取数据。但是,由于.out文件是自定义的一个txt文件,无法使用bruce-r的import函数进行导入。这种情况很常见,需要清楚自己的数据结构,包括分隔符和编写模式,以便正确读取数据。

完成这些操作后,R中的环境environment应该发生了变化。在右上角的环境中,可以看到两个相应的数据match data和PenguinData。PenguinData是一个符号,可以用任何其他符合命名规则的名称来代替它,比如abcd,比如xyz。这里存储一些可操作和创建的对象,将其称之为R对象。导入的对象的种类被称之为数据框,有关数据框的知识将在之后讲到。

4.3.2 命名

在命名时,应尽量简短,避免使用中文。如果发现文件目录没有问题,但仍然出现错误,有两种可能性。一种是拼写错误,例如拼写单词penguin时少一个字母或交换两个字母的位置。另一种可能是文件夹的大小写不匹配,例如使用大写字母开头的文件夹,但在输入路径时使用小写字母。在这种情况下,需要仔细检查并逐行对比当前工作目录和文件夹的实际目录是否匹配。最有效的方法是直接点击文件的属性,查看其目录和名称是否与输入的完全相同。

4.4 了解R里的数据 (R语言中的对象)

data structure
data structure

R语言中的几个常用对象包括:向量、矩阵、数组、数据框和列表。其中,向量是一列数字或其他相同类型的元素,而矩阵是一个二维的数据结构,有长和宽,可以看作是将向量按行排列而成的。数组是在矩阵的基础上再往上拓展,变成了一个三维的数据结构。

在R语言中,更多地使用数据框,它看起来像矩阵,但每个列可以是不同类型的元素。而列表则更加复杂,每个元素都可以是不同类型的对象。这些对象在编程软件中非常常用,比如Python和Matlab。

大家可以查看王敏杰老师和张敬信老师的两本书,这些书将更清楚地介绍这些基础知识。 王敏杰老师的书名为《数据科学中的R语言》,系统介绍了Hadley Wickham的tidyverse和ggplot2包,另附电子版课程,完全免费,网址 https://bookdown.org/wangminjie/R4DS/ 。 张敬信老师的《R语言编程:基于tidyverse》,https://github.com/zhjx19/introR