![61386112798b92e2578f1066cc74c45c.png](https://i-blog.csdnimg.cn/blog_migrate/4257673d1efb41e8bf0aea3e926dd580.jpeg)
数据结构主要内容包括:
- 1. 向量(vector)
- 1.1 向量的创建
- 1.2 向量的命名
- 1.3 常用向量的生成
- 1.4 向量的访问与编辑
- 2. 列表(list)
- 2.1 列表的创建
- 2.2 列表的命名
- 2.3 列表的访问与编辑
- 2.4 列表与向量的转换
- 3. 矩阵(matrix)
- 3.1 矩阵的创建
- 3.2 矩阵行/列的命名
- 3.3 矩阵的访问与编辑
- 3.4 矩阵的运算
- 4. 数据框(dataframe)
- 4.1 数据框的创建
- 4.2 数据框行/列的命名
- 4.3 数据框的访问与编辑
- 4.4 绑定/解绑数据框
- 5. 数组(array)
- 5.1 数组的创建与元素的访问
- 5.2 数组的命名
- 5.3 数组与向量的转换
- 6. 因子(factor)
- 6.1 因子的创建
- 6.2 因子的编辑
本文主要介绍数据框、数组、因子的使用。
数据结构(上)链接:
Sub-woo:R语言笔记(二):数据结构(上)zhuanlan.zhihu.com![c056f4d947ad06cc55d3de65b417e69a.png](https://i-blog.csdnimg.cn/blog_migrate/d9905b3e87a50457f39cdc3f636f2981.jpeg)
4. 数据框(dataframe)
4.1 数据框的建立
data.frame("列名1" = values, "列名2" = values, ..., stringsAsFactors = F)
# stringsAsFactor = T 将数据框中的字符型数据转换为因子型;stringsAsFactors = F 则不做处理
# 数据框具备“自动补齐”功能,各个列包含的数据行数互为整数倍关系
# 如第一列有 4 行数据,第二列有 8 行数据,第三列有 16 行数据
L3 <- LETTERS[1:3]
fac <- sample(L3, 10, replace = TRUE)
(d <- data.frame(x = 1, y = 1:10, fac = fac))
# 第一列元素 1 被重复了 10 次
4.2 数据框行/列的命名
第一种方法就是在建立数据框的时候直接命名,第二种如下所示:
row.names(x) <- c("行名1", "行名2", ...)
colnames(x) <- c("列名1", "列名2", ...)
4.3 数据框的访问与编辑
数据框访问与编辑行/列/单个元素的方式同矩阵一致,另外还可以通过以下方式访问某一列:
x$列名
4.4 绑定/解绑数据框
我们经常会使用 $ 访问数据框的某一列,但需要重复访问时,就稍显麻烦,我们就可以通过“绑定”数据框简化代码:
a <- c(1,2,3)
b <- c(1,2,3,4,5,6)
x <- data.frame("a" = a, "b" = b)
x$a
# [1] 1 2 3 1 2 3
attach(x)
a
# [1] 1 2 3
detach(x)
# 解绑数据框
注意 attach() 后访问的列不会进行自动补齐。
5. 数组(array)
5.1 数组的创建与元素的访问
array(data, dim = dimensions, dimnames = list())
# data 为数组中的元素,dimensions 表示维数,dimnames 为各个维度命名
dim1 <- c("a1", "a2")
dim2 <- c("b1", "b2", "b3")
dim3 <- c("c1", "c2")
x <- 1: 4
y <- array(x, dim = c(2, 3, 2), dimnames = list(dim1, dim2, dim3))
y # 可以将第一维和第二维看成是矩阵的行和列,第三维看成是表格序数
# 返回 c1,c2 两个表格,每个表格都是一个 2×3 的矩阵
, , c1
b1 b2 b3
a1 1 3 1
a2 2 4 2
, , c2
b1 b2 b3
a1 3 1 3
a2 4 2 4
可以看到,数组也具有“自动补齐”的功能。若要访问数组中的元素,则使用对应维数的“坐标”进行访问。
y[1, 2, 2] # [1] 1
y[2, 3, 2] # [1] 4
y[2, , ] # 返回每一个“表格”的第二行(注意是纵向填入数据)
c1 c2
b1 2 4
b2 4 2
b3 2 4
y[2, 2, ] # 返回每一个“表格”的第二行第二列数据
c1 c2
4 2
y[2, , 2] #返回第二个“表格”的第二行数据
b1 b2 b3
4 2 4
5.2 数组的命名
dimnames()
5.3 数组与向量的转换
a <- 1: 24
dim(a) <- c(2, 3, 4)
# 将向量 x 转换为 2×3×4 的三维数组
6. 因子(factor)
6.1 因子的创建
factor(data, ordered = T, levels = c(最低, ..., 最高), labels = c(最低-因子名, ..., 最高-因子名))
# ordered = T 因子化后的变量为定序变量,ordered = F 因子化后的变量为无序变量,二者均为分类变量
# levels 手动设定因子排序方式
# labels 对因子水平进行命名
satisf <- c("满意", "很满意", "满意", "不满意", "很满意", "很不满意")
satisf <- factor(satisf, ordered = T, levels = c("很不满意", "不满意", "满意", "很满意"),
labels = c("I", "II", "III", "IV"))
satisf
[1] III IV III II IV I
Levels: I < II < III < IV
6.2 因子的编辑
factor(data, ordered = , levels = , labels = , exclude = )
# exclude 可用于删除特定因子
data <- c("A", "C", "C", "B", "D")
data <- factor(data, exclude = "C")
data
[1] A <NA> <NA> B D
Levels: A B D
可以看到 C 被 NA 替代。