admin 管理员组

文章数量: 887021


2024年1月10日发(作者:数据库原理和数据库系统概论区别)

Liu Chen

R语言傻瓜教程——1基础

0. 约定

阴影为代码或R的输出内容。

1. 安装

1.1 安装R和RStudio

(1)从/cran/下载R语言相应版本,双击安装;

(2)从/products/rstudio/download/下载RStudio安装。

1.2 说明

(1)R语言本身仅提供了命令行工具,一般用户可能会觉得使用不便,所以用RStudio作为工具来使用R语言;

(2)RStudio仅为R的IDE(集成开发环境),依赖于R;

(2)在苹果系统中,启动RStudio时要求安装command line tools,在弹出窗口中选择安装即可);

(3)R和RStudio都是免费开放源代码的,所以尽可能在官方网站上下载(R在全球有很多镜像,等同于官网,上述下载地址即其在北京交通大学的镜像)。

2. 运行

2.1 运行R语言

如果不使用RStudio,双击R语言图标(如下图)即可启动。

启动后如下图所示,在提示符处输入R语言命令。

1

Liu Chen

1.2 RStudio启动

RStudio相对于R语言自身提供的命令行工具,使用要便捷得多。RStudio图标如下图。

启动后RStudio的环境如下图所示。左侧为同启动R时一样的命行窗口;右上侧为“环境”和“历史”。环境是指当前R语言的运行环境,也称为工作空间,在使用过程中所创建的变量、数据都在这里列出,而用户在使用过程中输入的命令都在“历史”子窗口中列出。

右侧包括“文件”、“绘图”、“扩展包”、“帮助”、“视图”等子窗口。相关功能在后续使用过程中再详细说明。

除此之外RStudio还有很多默认没有显示的子窗口,通过顶部菜单view中的选项可以选择显示它们。

2

Liu Chen

1.3 退出

在退出时,R和RStudio默认都会弹出窗口询问是否保存工作空间,如果选择保存,则R或RStudio会保存全部的变量、数据等,下次打开R或RStudio时还可以继续使用而不用再次输入。

如下分别为R和RStudio退出时的弹出窗口。

3. R语言运算符号

运算符号:+(加)、-(减)、*(乘)、/(除)、^(乘方)、%/%整除、%%求余;

逻辑判断符号:>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、!=(不等)、

==(相等)

逻辑运算符号:&(逻辑与)、|(逻辑或,Enter键上边的竖线)

赋值符号:<-或->

示例:

在命令窗口输入

x<-2

此时,变量a的值就为2。2->a的功能与a<-2一样。赋值符号也可以用=替代,但是在某些情况下会出错,所以不建议在R语言中使用。

4. R语言数据类型

4.1 基本数据类型

R语言中基本数据类型是指仅包含一个数值的数据类型,主要包括数值型、字符型、逻辑型、空值等。

(1)数值型

如1,3.14等能够进行数学运算的数字。

(2)字符型

即文本数据,需放在双引号或单引号之间,如"a”、'abc'、"张三"。

特别提示,这里的单引号和双引号都是英文输入法下的双引号和单引号,中文的符号只能算是普通文本。在各种编程语言中,中文标点都只能作为同普通文本一样的字符使用,代码中不应出现,如下代码会出现错误:

x<-“hello R”

y<-‘hello R’

下面是正确代码(注意引号):

x<-"hello R"

y<- 'hello R'

用中文标点符号替代英文符号是初学编程的人最容易出现的错误,需特别注意以免打击学习积极性。

3

Liu Chen

(3)逻辑型

逻辑型数据只有两个取值TRUE和FALSE,TRUE和FALSE必须是大写的。TRUE和FALSE可以分别简写为T和F,也必须大写。如:

x<-TRUE

y<-FALSE

(4)空值

在统计数据中常常会出现一些缺失的值,R语言中用一个特殊的值NA(大写)来表示。NA与其他数据的运算结果都是NA。如:

x<-NA

有时候,不能确定一个变量是否是空值,R语言提供了一个函数()用来判断是否空值,如:

x<-NA

(x)

结果为TRUE。

4.2 数据对象

R语言中数据对象是指包含一组数值的数据类型,主要包括向量、矩阵、数组、列表、数据框。

(1)向量

向量是由相同基本类型数值组成的序列,可以认为其等同于数学中的向量,在R语言中向量的使用相当频繁。

在R语言中使用函数c()来创建一个向量,如:

x<-c(1,2,3,4,5)

x

输出为:

[1] 1 2 3 4 5

其中[1]为输出内容的行号。

a. 向量运算

向量的加减乘除运算是对向量元素的加减乘除运算。

输入

x

x+1

x

输出为

[1] 2 3 4 5

输入

x<-c(1,2,3,4)

y<-c(1,1,1,1)

x+y

输出为

[1] 2 3 4 5。

b. 快速生成有序向量(函数seq和rep)

在需要大量有序数值向量时,为了避免手工输入的麻烦,R语言提供了快速生成的方法。如:

输入

4

Liu Chen

x<-1:10

x

输出为

[1] 1 2 3 4 5 6 7 8 9 10

输入

x<-10:1

x

输出为

[1] 10 9 8 7 6 5 4 3 2 1

上述利用“:”只能生成步长为1的向量,若要生成任意步长的向量需要使用函数seq(),它有三个参数,(最小值,最大值,步长)。如:

输入

x<-seq(1,20,2)

x

输出为

[1] 1 3 5 7 9 11 13 15 17 19

输入

x<-seq(1,5,0.5)

x

输出为

[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

别外一个函数rep()可以通过重复一个基本数值或数值对象多次来创建一个较长的向量,它有二个参数,(数据,重复次数)。如:

输入

x<-rep(1,10)

x

输出

[1] 1 1 1 1 1 1 1 1 1 1

输入

x<-rep(c(1,2,3),3)

x

输出

[1] 1 2 3 1 2 3 1 2 3

c. 向量索引

向量索引也称为向量中数值元素的下标,用来引用向量中的单个数值,用方括号[]表示,如:

输入

x<-c(1,2,3,4,5)

x[1]

输出

[1] 1

向量索引除了引用单个值之外,还起过滤的作用,如:

输入

x<-c(1,2,3,4,5)

5

Liu Chen

x[x>3]

输出x中大于3的数值

[1] 4 5

d. 常用的向量函数

函数名

sum

max

min

mean

length

var

sd

median

quantile

sort

rev

append

replace

功能

求和

最大值

最小值

均值

长度

方差

标准差

中位数

五个分位数

排序

倒序

添加

替换

示例,已知x<-c(2,1,5,3,4),y<-c(8,9)

输入

sum(x)

max(x)

min(x)

mean(x)

length(x)

var(x)

sd(x)

median(x)

quantile(x)

sort(x)

sort(x,TRUE)

rev(x)

append(x,8)

append(x,y)

replace(x,1,7)

replace(x,c(1,2),7)

[1] 15

[1] 5

[1] 1

[1] 3

[1] 5

[1] 2.5

[1] 1.581139

[1] 3

0% 25% 50% 75% 100%

1 2 3 4 5

[1] 1 2 3 4 5

[1] 5 4 3 2 1

[1] 4 3 5 1 2

[1] 2 1 5 3 4 8

[1] 2 1 5 3 4 8 9

[1] 7 1 5 3 4

[1] 7 7 5 3 4

输出

提示:利用help函数可以查看R语言文档。例如,当不知道replace函数的功能时,输入help(replace),在RStudio右下的help窗口中即显示repalce函数的详细说明。

(2)矩阵

矩阵运算虽然是统计理论的重要工具,但与基本统计方法的应用关系不大,因此没有矩阵运算基础可以跳过本部分。

R语言中的矩阵基本等同与数学中的矩阵。R语言中使用matrix函数创建一个矩阵。matrix函数有三个参数,(数值向量,行数,列数)。如:

输入

x<-matrix(c(1,2,3,4),2,2)

x

输出两行两列的矩阵及其行号和列号

[,1] [,2]

[1,] 1 3

[2,] 2 4

matrix还有第四个参数byrow,即数据向量转为矩阵时数据的排列顺序,其默认值为FALSE,如:

输入

x<-matrix(c(1,2,3,4),2,2,TRUE)

输出

[,1] [,2]

[1,] 1 2

6

Liu Chen

[2,] 3 4

a. 矩阵运算

矩阵的+-*/运算是对矩阵元素的运算,如:

输入

x<-matrix(c(1,2,3,4),2,2)

x*2

输出

[,1] [,2]

[1,] 2 6

[2,] 4 8

输入

x<-matrix(c(1,2,3,4),2,2)

y<-matrix(c(5,6,7,8),2,2)

x+y

输出

[,1] [,2]

[1,] 6 10

[2,] 8 12

矩阵运乘法运算符号为%*%,如:

输入

x<-matrix(c(1,2,3,4),2,2)

y<-matrix(c(5,6,7,8),2,2)

x%*%y

输出

[,1] [,2]

[1,] 23 31

[2,] 34 46

b. 矩阵下标

矩阵下标类似向量的下标。所不同的是,向量是两维的,下标包括两个数字,表示相应元素所在的行和列,如:

输入

x<-matrix(c(1,2,3,4),2,2)

x[1,2]

输出第一行第二列元素

[1] 3

c. 常用的矩阵函数

函数名 功能

diag

solve

eigen

rank

取对角元素/生成对角阵

求逆/解线性方程组

求特征向量/特征值

求秩(元素位置,矩阵秩可用qr()$rank)

7

Liu Chen

t

det

转置

行列式

(3)数组

R语言中,数组是向量和矩阵的推广,向量和矩阵是数组的特殊形式。向量是一维数组,而矩阵是二维数组。利用array()函数创建数组,其参数为(数据向量,维数向量)如:

输入

x<-array(c(1,2,3,4),c(2,2))

x

上述语句输入数据为1,2,3,4,生成两行两列的数组,输出为

[,1] [,2]

[1,] 1 3

[2,] 2 4

所以,array(c(1,2,3,4),c(2,2)等价于matrix(c(1,2,3,4),2,2)。利用array函数可以生成更高维的数组。

注意:向量、矩阵和数组中也可以包含其他的数据类型,如字符型、逻辑型、空值。

(4)列表

向量、矩阵和数组要求元素必须为同一基本数据类型。如果一组数据需要包含多种类型的数据,则可以使用列表,如:

输入

x<-list(a=1,b=2,c=3)

输出为

$a

[1] 1

$b

[1] 2

$c

[1] 3

与向量、矩阵和数组相比,列表没有下标号,但是每个数据都有一个名字。数组使用下标来引用元素,而列表用名字来引用元素,如:

输入

x<-list(a=1,b=2,c=3)

x$a

输出

[1] 1

列表与向量、矩阵和数组的另一个重要区别是,向量、矩阵和数组的元素只能是一个简单基本数据,而列表的元素还可以是其他的其他各种数据对象,比如向量、矩阵、数组或者另一个列表,如:

输入

x<-list(a=1,b=c(1,2,3),c="ab",d=c("a","c","c"),e=matrix(c(1,2,3,4),2,2),f=list(a=1,b=2))

x

这是一个复杂的列表,a为数字,b为向量,c为字符,d为字符向量,e为矩阵,而f为另一个列表。输出为

$a

8

Liu Chen

[1] 1

$b

[1] 1 2 3

$c

[1] "a"

$d

[1] "a" "c" "c"

$e

[,1] [,2]

[1,] 1 3

[2,] 2 4

$f

$f$a

[1] 1

$f$b

[1] 2

列表的名字可以连续引用,输入

x$f$a

输出为

[1] 1

(5)数据框

数据框是另一种可以有不同基本数据类型元素的数据对象。简单来说,一个数据框包含多个向量,向量的数据类型可以不一样。因此,数据框是介于数组和列表之间的一种数据对象,与矩阵相比它可有不同数据类型,与列表相比它只能包含向量,而且这些向量的长度通常是相等的。

a. 创建数据框

R语言使用()来创建数据框,如:

输入

x<-c("张三","李四","王五","赵六")

y<-c("男","女","女","男")

z<-c(89,90,78,67)

(x,y,z)

输出为

x y z

1 张三 男 89

2 李四 女 90

3 王五 女 78

4 赵六 男 67

其中,每行行首的数字是该行名字,可以使用()来重新为每行命名。

输入

(student)<-c("a","b","c","d")

student

输出

x y z

9

Liu Chen

a 张三 男 89

b 李四 女 90

c 王五 女 78

d 赵六 男 67

当然,数据框中每列向量也可以有名字,如:

输入

(姓名=x,性别=y,分数=z)

输出为

姓名 性别 分数

1 张三 男 89

2 李四 女 90

3 王五 女 78

4 赵六 男 67

注意,这些的姓名、性别和分数为变量,所以不能加引号。

b. 数据框中数据的引用

获取数据框中的一行或多行:

输入

student[1,]

输出

x y z

a 张三 男 89

输入

student[(1:2),]

输出

x y z

a 张三 男 89

b 李四 女 90

获取数据框一列或多列:

输入

student[,1]

输出

[1] 张三 李四 王五 赵六

输入

student[,(1:2)]

输出

x y

a 张三 男

b 李四 女

c 王五 女

d 赵六 男

还可以用访问列表数据的方式访问数据框:

输入

student$x

输出

10

Liu Chen

[1] 张三 李四 王五 赵六

同向量的引用一样,可以过滤数据框中的数据,如:

输入

student[student$y>80,]

输出

x y z

a 张三 男 89

b 李四 女 90

5. 数据导入导出

分别介绍利用RStudio导入数据,利用R函数导入导出数据。初学者可以忽略后一种方法。

假设有文件以及,csv文件是以Tab符号分隔的文本文件,Excel数据可以另存为csv文件(Mac 系统中建议使用Numbers编辑、导出csv文件,以避免出现乱码)。这两个文件内容相同:

姓名 性别 分数

张三 男 89

李四 女 90

王五 女 78

赵六 男 67

5.1 利用RStudio导入数据

顶部菜单选择tools->Import Dataset->From Local File,弹出窗口选择要导入的数据文件,然后弹出如下窗口:

因为数据文件中包含了列名,所以Heading选择yes;文件中列是用逗号分隔的,所以Separator选择Comma,点击Import即可导入数据并保存入student对象。

11

Liu Chen

其他格式文件的导入方法一样。

5.2 导入R包中的数据

R的扩展包中常常包含样例数据,这些数据有助于学习扩展包的功能。此外,datasets包中包含大量的数据,可以用来学习R语言。要想利用这些数据,就要将它们导入到当前工作空间中来。可以利用data函数导入扩展包中的数据,如:

输入

data(package="datasets")

该命令导入datasets包中的全部数据。

输入

data()

查看当前工作空间的数据。

输入

data(Nile,package="datasets")

该命令仅将datasets包中的Nile数据导入工作空间。

此外,R语言在工作空间中使用扩展包前,要加载相应的扩展包,使用函数library可加载扩展包,如:

library("datasets")

加载扩展包后,其中的数据集就会全部加载到工作空间中,可直接使用。

5.3 利用R语言函数导入数据

(1)读入文本文件

("",header=T,sep=",")

(2)读入csv文件

("",header=T,sep=",")

(3)读入SPSS数据

("")

注意:如果数据文件不在当前工作目录中,需要加上正确的相对或绝对路径。

5.4 导出数据

(1)导出为文本

(student,"")

(2)导出为csv文件

(student,"")

6. 工作空间数据管理

6.1 查看、删除、编辑数据

a.列出工作空间全部数据变量名

ls()

b. 删除数据

rm(dataname)

c. 查看数据(注意大小写)

View(dataname)

d. 查看dataframe前10行

head(dataframe)

e. 查看dataframe后10行

tail(dataframe)

12

Liu Chen

f. 编辑数据

edit(dataname)或者fix(dataname)

g. 删除矩阵或dataframe的行(假设有数据data)

data[-1,] #删除第一行

data[c(-1,-2),] #删除第一行和第二行

data[-1:-3,] #删除第一行到第三行

h. 删除矩阵或dataframe的列 (假设有数据data)

data[,-1] #删除第一行

data[,c(-1,-2)] #删除第一行和第二行

data[,-1:-3] #删除第一行到第三行

6.2 变量处理

a. dataframe添加一列或合并dataframe

(old_dataframe,new_column)

(dataframe1,dataframe2)

b. 变量重命名

方法1:edit()或fix()函数打开数据编辑器,点击变量名可以对其进行修改。

方法2:names()函数。names()函数可以显示dataframe的变量名,也可以通过赋值进行修改,下述代码将第一列变量名字改为new_name:

names(dataframe)[1]<-"new_name"

c. 变量类型判断与转换

类型

数值型

字符型

向量

矩阵

数据框

逻辑型

c

ter

l

判断

c

ter

l

转换

示例:

输入

x<-c(1,2,3,4)

(x)

输出

TRUE

输入

x<-c("1","2","3","4") #注意,数字加引号就成为字符型数值了

c(x)

输出

[1] 1 2 3 4

7. R语言脚本

所谓脚本,就是指程序片段。R语言脚本就是将多条R指令保存为一个脚本文件,用以实现复杂的功能。

7.1 创建R语言脚本

选择RStudio顶部菜单中File->New File->R Script即可以在RStudio中创建一个脚本文

13

Liu Chen

件。上述小节中在命令行中输入的指令都要以放入脚本中。需要注意的是,R语言脚本每行只能入一条指令。如果一定要在一行中放置多条指令则需要用“;”隔开(英文输入法下的分号)。点击RStuio工具栏中的图标也可以创建R脚本。在原生的R语言中,创建脚本选择顶部菜单中File->New Document可以创建脚本。R语言脚本的扩展名为R。

R语言为脚本提供了完整的程序语言语法,如if、for、while等语句,以及函数function定义等,有兴趣可以查找相关资料深入学习。

7.2 执行R语言脚本

在RStudio中,点击脚本编辑器顶部的按钮可以运行脚本中光标所在的行,按钮运行整个脚本中的全部指令。

若要在命令窗口中运行脚本,用source()函数,如source("myscript.R")。如果脚本不在当前工作空间中,则需要给出正确的路径。查看当前工作空间路径使用getwd()函数,也可以使用setwd()来设置新的工作空间。

8. R语言的包

R语言的功能是通过包(package)来实现的,因而其功能可以很容易的被拓展。正是R语言的这种开放性使得其具有强大的功能和时效性,新的算法被提出之后很快就有相应的拓展包被释放出来。

(1)R语言中包的管理

library() 查看全部已安装的包

library("packagename") 加载名为packagename的包

(.packages()) 查看已加载的包

es("packagename") 安装名为packagename的包

(2)RStudio中包的管理

RStudio中包的管理更加便捷,在Package子窗口中,如下图所示:

Package子窗口中列出了全部已安装的包,选中的包为已加载的包(选中没有加载的包即可将其加载)。点击可安装新的包。

9. 小结

本部分介绍了R及RStudio的安装与运行、R语言的运算符、R语言的基本数据类型(数值,字符,逻辑,空值)、R语言的数据对象(向量,矩阵、列表、数据框)、数据的导入导出、工作空间中数据变量的管理,以及R语言脚本。虽然涉及到数十个函数,但是它们都很容易记忆和使用,而且也并非需要将它们全都记住,仅需熟练使用其中的15个左或即能

14

Liu Chen

满足日常80%的应用。

学习编程需要特别注意两点:第一,一定要动手实践;第二,不要死记,灵活使用文档、手册,以及最常使用的百度谷歌。

15


本文标签: 数据 语言 向量 矩阵 使用