矩阵
矩阵就像Excel的工作表。它用于组合具有相同类型的向量,可以是数字,字符或逻辑。矩阵用于将数据表存储在R中。
创建和命名矩阵
要轻松创建矩阵,请使用函数cbind()或rbind(),如下所示:
# 数字向量
col1 <- c(5, 6, 7, 8, 9)
col2 <- c(2, 4, 5, 9, 8)
col3 <- c(7, 3, 4, 8, 7)
#按列合并向量
my_data <- cbind(col1, col2, col3)
my_data
col1 col2 col3
[1,] 5 2 7
[2,] 6 4 3
[3,] 7 5 4
[4,] 8 9 8
[5,] 9 8 7
# 更改行的名字
rownames(my_data) <- c("row1", "row2", "row3", "row4", "row5")
my_data
col1 col2 col3
row1 5 2 7
row2 6 4 3
row3 7 5 4
row4 8 9 8
row5 9 8 7
- cbind():按列组合R对象
- rbind():按行组合R个对象
- rownames():检索或设置类似矩阵的对象的行名
- colnames():检索或设置类似矩阵的对象的列名
如果要转置数据,请使用函数t():
t(my_data)
row1 row2 row3 row4 row5
col1 5 6 7 8 9
col2 2 4 5 9 8
col3 7 3 4 8 7
矩阵尺寸
R的功能nrow()和NcoI位()返回的行和列中存在的数据的数目,分别。
ncol(my_data) # 列数
[1] 3
nrow(my_data) # 行数
[1] 5
dim(my_data) # 行列数
[1] 5 3
获取矩阵的子集
- 通过正索引选择行/列
可以按以下方式选择行和/或列:my_data [row,col]
# 输出第二行
my_data[2, ]
col1 col2 col3
6 4 3
# 输出第二到第四行
my_data[2:4, ]
col1 col2 col3
row2 6 4 3
row3 7 5 4
row4 8 9 8
# 输出特定非连续行数
my_data[c(2,4), ]
col1 col2 col3
row2 6 4 3
row4 8 9 8
# 输出第三行
my_data[, 3]
row1 row2 row3 row4 row5
7 3 4 8 7
# 输出第二行第三列内容
my_data[2, 3]
[1] 3
- 按行/列名选择
# 输出第二列内容
my_data[, "col2"]
row1 row2 row3 row4 row5
2 4 5 9 8
矩阵计算
- 也可以对矩阵执行简单的操作。例如,以下R代码将矩阵的每个元素乘以2:
my_data*2
col1 col2 col3
row1 10 4 14
row2 12 8 6
row3 14 10 8
row4 16 18 16
row5 18 16 14
或者,计算log2值:
log2(my_data)
col1 col2 col3
row1 2.321928 1.000000 2.807355
row2 2.584963 2.000000 1.584963
row3 2.807355 2.321928 2.000000
row4 3.000000 3.169925 3.000000
row5 3.169925 3.000000 2.807355
rowSums()和colSums()函数:分别计算每行的总和和每列的总和。
rowSums(my_data)
row1 row2 row3 row4 row5
14 13 16 25 24
colSums(my_data)
col1 col2 col3
35 28 29
如果你对行/列均值感兴趣,则可以使用函数rowMeans()和colMeans()分别计算行均值和列均值。
请注意,也可以使用函数apply()将任何统计函数应用于矩阵的行/列。
apply()的简化格式如下:
apply(X, MARGIN, FUN)
- X:数据矩阵
- MARGIN:可能的值为1(对于行)和2(对于列)
- FUN:应用于行/列的函数
使用apply()如下:
# 对行进行平均值运算
apply(my_data, 1, mean)
row1 row2 row3 row4 row5
4.666667 4.333333 5.333333 8.333333 8.000000
# 队列进行平均值运算
apply(my_data, 2, mean)
col1 col2 col3
7.0 5.6 5.8
数据框
数据框就像一个矩阵,但可以具有不同类型的列(数字,字符,逻辑)。行是观察值(个人),列是变量。
创建一个数据框
可以使用data.frame()函数创建数据框,如下所示:
patients_data <- data.frame(
name = my_patients,
age = patient_ages,
height = c(180, 170, 185, 169),
married = are_married
)
# 打印查看
patients_data
name age height married
Zheng Zheng 27 180 TRUE
Wang Wang 25 170 FALSE
Liu Liu 29 185 TRUE
Li Li 26 169 TRUE
要检查数据是否为数据框格式,请使用is.data.frame()函数。如果数据是数据框,则返回TRUE:
is.data.frame(patients_data)
[1] TRUE
is.data.frame(my_data)
[1] FALSE
对象“ patients_data”是一个数据框,但不是对象“ my_data”。我们可以使用as.data.frame()函数将其转换为数据框:
# my_data的类型 --> matrix
class(my_data)
[1] "matrix"
# 将它转换为数据框格式
my_data2 <- as.data.frame(my_data)
# Now, the class is data.frame
class(my_data2)
[1] "data.frame"
如矩阵部分所述,你可以使用函数t()转置数据框:
t(patients_data)
子集数据框
要仅从数据框中选择某些列,你可以按名称或按其位置(即第1、2、3列等)引用这些列。
- 按名称和位置进行正索引
# 访问“名称”列中的数据
# 使用$符号
patients_data$name
[1] Zheng Wang Liu Li
Levels: Liu Li Zheng Wang
# 或者使用
patients_data[, 'name']
[1] Zheng Wang Liu Li
Levels: Liu Li Zheng Wang
# 输出第一和第三列
patients_data[ , c(1, 3)]
name height
Zheng Zheng 180
Wang Wang 170
Liu Liu 185
Li Li 169
2.按特征索引
我们要选择年龄> = 27的所有病人。
patients_data$age >= 27
[1] TRUE FALSE TRUE FALSE
TRUE指定该行包含age> = 27的值。
# 选择符合条件的行
patients_data[patients_data$age >= 27, ]
name age height married
Zheng Zheng 27 180 TRUE
Liu Liu 29 185 TRUE
上面的R代码命令内容为:R从年龄大于等于27的patients_data获取所有行,然后返回所有列。
如果你不想查看所选行的所有列数据,但只想显示例如年龄大于等于27的病人的病人名称和年龄,则可以使用以下R代码:
patients_data[patients_data$age >= 27, c(1, 2)]
name age
Zheng Zheng 27
Liu Liu 29
# 或者
patients_data[patients_data$age >= 27, c("name", "age")]
name age
Zheng Zheng 27
Liu Liu 29
如果发现选择语句开始变得不方便,则可以先将行和列选择放入变量中,例如:
age27 <- patients_data$age >= 27
cols <- c("name", "age")
然后,你可以选择带有这些变量的行和列:
patients_data[age27, cols]
name age
Zheng Zheng 27
Liu Liu 29
也可以如下使用函数子集()。
扩展数据框
在数据框中添加新列
#将组列添加到patient_data
patients_data$group <- patient_groups
patients_data
name age height married group
Zheng Zheng 27 180 TRUE recovered_patient
Wang Wang 25 170 FALSE not_recovered_patient
Liu Liu 29 185 TRUE recovered_patient
Li Li 26 169 TRUE not_recovered_patient
也可以使用函数cbind()和rbind()扩展数据框。
cbind(patients_data, group = patient_groups)
获取帮助
要阅读有关给定功能的更多信息,例如mean,可以如下使用R函数help():
help(mean)
或使用此:
?mean
如果您觉得我说的还有点意思,请点赞让我感到您的支持,您的支持是我写作最大的动力~ijournal:高颜值的期刊检索网站,助您快速找到理想目标期刊(weixin小程序也上线了哦)投必得:全专业中英文论文润色编辑助力您的论文快速发表,点击了解业务详情
专栏传送门:
投必得科研软件安装使用手册;投必得:SCI期刊介绍与选择;投必得,教你写论文;投必得统计分析大讲堂;投必得科研生活解忧杂货店