跳转至

使用 R 语言进行数据分析

软件安装

  • R-software
    • 如果是在 Windows 上使用,请在网站主页点击 Download R for Windows,然后点击 install R for the first time,最后点击 Download R 4.0.4 for Windows,下载软件后请自行完成安装。
    • R 语言支持软件仅在后台运行,没有图形化界面。
  • RStudio
    • 直接点击蓝色的 Download 按钮,或者在页面下方选择其他系统版本下载。下载软件后请自行完成安装。

教学资源

在线资源(推荐)

书籍

基本数据类型

R 语言的数据类型,主要有以下这几种:

  • 数值型(numerics)
  • 整数型(integer)
  • 复数型(complex)
  • 逻辑型(logical)
  • 字符型(characters)

数值型(numerics)

数值型是 R 语言中最基本的数据类型。当我们把一个数字值赋给变量,那变量的类型就是数值型:

> x = 11.15       # 把 11.15 这个数值赋给变量 x
> x              # 输出出 x 的值
[1] 11.15
> class(x)       # 输出 x 的类型
[1] "numeric"

整数或小数都可以是数值型变量。但如果按照以上的方法创建,那么整数变量也会被视为小数变量。

整数型(integer)

如果要创建整数型变量,就得使用函数 is.integer

> y = as.integer(3)
> y              # 输出 y 的值
[1] 3
> class(y)       # 输出 y 的类型
[1] "integer"
> is.integer(y)  # y 是否为整数?
[1] TRUE

除了使用 is.integer 函数,你也可以附加 L 后缀来实现:

> y = 3L
> is.integer(y)  # y 是否为整数?
[1] TRUE

如果要对小数进行取整,我们可以使用函数 as.integer

> as.integer(3.14)    # 对变量进行强制数值转换
[1] 3

也可以对字符串类型进行解析并取整:

> as.integer("5.27")  # 对变量进行强制数值转换
[1] 5

但如果解析的字符串不是数值,那就会出错:

> as.integer("Joe")   # 解析一个非数值型的字符串
[1] NA
Warning message:
NAs introduced by coercion

R 语言像 C 语言一样,把整数 1 0 与逻辑 TRUE FALSE对应了起来:

> as.integer(TRUE)    # TRUE 的数值型变量
[1] 1
> as.integer(FALSE)   # FALSE 的数值型变量
[1] 0

复数型(complex)

在 R 语言中,复数变量通过 i 来定义:

> z = 1 + 2i     # 创建一个复数变量 z
> z              # 输出 z 的值
[1] 1+2i
> class(z)       # 输出 z 的类型
[1] "complex"

如果我们单纯对 -1 开方,那将会出错:

> sqrt(1)       # 对 -1 开方
[1] NaN
Warning message:
In sqrt(1) : NaNs produced

但是对复数 −1+0i 开方,那就没问题:

> sqrt(1+0i)    # 对 −1+0i 开方
[1] 0+1i

也可以用强制类型转换来进行运算:

> sqrt(as.complex(1))
[1] 0+1i

逻辑型(logical)

逻辑型通常通过比较变量而产生:

> x = 1; y = 2   # 样本变量
> z = x > y      # x 比 y 大吗?
> z              # 输出逻辑变量
[1] FALSE
> class(z)       # 输出 z 的类型
[1] "logical"

基本逻辑操作有 &(与),|(或), !(非):

> u = TRUE; v = FALSE
> u & v          # 对 u,v 进行 "与" 运算
[1] FALSE
> u | v          # 对 u,v 进行 "或" 运算
[1] TRUE
> !u             # 对 u 进行 "非" 运算
[1] FALSE

字符型(character)

字符型可通过函数 as.character 进行强制类型转换得到:

> x = as.character(3.14)
> x              # 输出字符串
[1] "3.14"
> class(x)       # 输出 x 的类型
[1] "character"

要合并两个字符型变量,可以使用函数 paste

> fname = "Joe"; lname ="Smith"
> paste(fname, lname)
[1] "Joe Smith"

像 C 语法一样,可以用格式输出以增加可读性,用函数 sprintf 即可:

> sprintf("%s has %d dollars", "Sam", 100)
[1] "Sam has 100 dollars"

如果要从字符串中提取子串,可以使用函数 substr(示例中把第 3 到第 12 个字符之间的字符截取了下来):

> substr("Mary has a little lamb.", start=3, stop=12)
[1] "ry has a l"

如果要把第一个遇见的字符替换成另外一个,可以使用函数 sub(示例中把 little 替换成了 big):

> sub("little", "big", "Mary has a little lamb.")
[1] "Mary has a big lamb."

向量

R 语言中的向量

向量是一个包含相同类型元素的数组,向量中的成员被官方称为 components。

以下是一个示例向量(包含三个数值变量 2 3 5):

> c(2, 3, 5)
[1] 2 3 5

也可以全部由逻辑型构成:

> c(TRUE, FALSE, TRUE, FALSE, FALSE)
[1] TRUE FALSE TRUE FALSE FALSE

也可以由字符型构成:

> c("aa", "bb", "cc", "dd", "ee")
[1] "aa" "bb" "cc" "dd" "ee"

如果想知道一个向量内有多少个成员,可以使用函数 length

> length(c("aa", "bb", "cc", "dd", "ee"))
[1] 5

合并向量

如果要合并两个向量,可以使用函数 c

> n = c(2, 3, 5)
> s = c("aa", "bb", "cc", "dd", "ee")
> c(n, s)
[1] "2"  "3"  "5"  "aa" "bb" "cc" "dd" "ee"

注意在上面的例子中,如果合并两个不同数据类型的向量,那合并后的类型将会是向下兼容的(即将比较严格的类型,进行强制类型转换为比较宽松的类型,例如将数值型变成字符型)

向量基本运算

我们先假定两个向量 a b

> a = c(1, 3, 5, 7)
> b = c(1, 2, 4, 8)

以下就是向量的基本运算:

> a + b
[1] 2 5 9 15

> a - b
[1] 0 1 1 -1

> 5 * a
[1] 5 15 25 35

> a * b
[1] 1 6 20 56

> a / b
[1] 1.000 1.500 1.250 0.875

如果相加的两个向量成员数量不一致,那么结果将会向下兼容,即输出变量的长度取决于较长的那个:

> u = c(10, 20, 30)
> v = c(1, 2, 3, 4, 5, 6, 7, 8, 9)
> u + v
[1] 11 22 33 14 25 36 17 28 39

检索向量

如果要从向量中取出成员,可以使用在 [ ] 中声明索引的方法,也就是 [第几个成员]

> s = c("aa", "bb", "cc", "dd", "ee")
> s[3]  # 取出第三个成员的值并输出
[1] "cc"

如果索引前加一个负号,比如 [-3],就意味着取出除第三个成员外的其他成员:

> s[-3]
[1] "aa" "bb" "dd" "ee"

如果索引超出了向量的长度,那就会报错:

> s[10]
[1] NA

【更新中】