五、数据结构--矩阵、列表

2023-02-27 15:14:28 浏览数 (1)

生信技能树学习之数据结构--矩阵、列表

矩阵matrix 二维,只允许一种数据类型

列表。可装万物,没有列与列的区别,

矩阵和列表

矩阵的来源

# 1.由数值型数据框转换

代码语言:javascript复制
m1 = as.matrix(iris[,1:4])

# 2.由向量改变维度而来

代码语言:javascript复制
m2 = matrix(rnorm(18),nrow = 3)
m2

# 3. 由向量拼接而来

代码语言:javascript复制
m3 = cbind(1:10,
           11:20,
           30:21)
m3

#4.内置

代码语言:javascript复制
volcano

一、矩阵新建

代码语言:javascript复制
m <- matrix(1:9, nrow = 3)
m

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

[1,] 1 4 7

[2,] 2 5 8

[3,] 3 6 9

二、矩阵取子集

代码语言:javascript复制
m[2,]        [1] 2 5 8
m[,1]        [1] 1 2 3

矩阵取子集不支持

三、加列名

代码语言:javascript复制
colnames(m) <- c("a","b","c") 
m

a b c

[1,] 1 4 7

[2,] 2 5 8

[3,] 3 6 9

四、转置

代码语言:javascript复制
> t(m) #转置

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

a 1 2 3

b 4 5 6

c 7 8 9

代码语言:javascript复制
as.data.frame(m) 
#转换为数据框,没有赋值,所以输出结果仍是矩阵,只是在控制台看看结果
class(m)    [1] "matrix" "array"  #array是数组,而矩阵是特殊的数组
m=as.data.frame(m) 
m
class(m)  [1] "data.frame"

五、矩阵画热图

代码语言:javascript复制
pheatmap::pheatmap(m)
pheatmap::pheatmap(m,cluster_cols = F,cluster_rows =F )

六、新建列表和取子集

代码语言:javascript复制
l <- list(m1=matrix(1:9, nrow = 3),
          m2=matrix(2:9, nrow = 2))
l     ##列表里的下一级也叫元素,m1,m2只是列表l中的元素名字,m1和m2都是矩阵。

$m1

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

[1,] 1 4 7

[2,] 2 5 8

[3,] 3 6 9

$m2

[,1] [,2] [,3] [,4]

[1,] 2 4 6 8

[2,] 3 5 7 9

代码语言:javascript复制
####不输入m1 和m2时,输出的就是[[1]] [[2]]
l <- list(matrix(1:9, nrow = 3),
          matrix(2:9, nrow = 2))

[[1]]

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

[1,] 1 4 7

[2,] 2 5 8

[3,] 3 6 9

[[2]]

[,1] [,2] [,3] [,4]

[1,] 2 4 6 8

[2,] 3 5 7 9

代码语言:javascript复制
###两个中括号是取出一个矩阵
l[[2]] ###取出第二个矩阵,
l$m1 ###取出m1子集

列表的下一级也是元素,列表的元素可以包罗万象,什么数据结构都可以

### 补充:元素的名字

代码语言:javascript复制
scores = c(100,59,73,95,45)
names(scores) = c("jimmy","nicker","Damon","Sophie","tony")
scores

jimmy nicker Damon Sophie tony

100 59 73 95 45

代码语言:javascript复制
scores["jimmy"]     ##取子集

jimmy

100

代码语言:javascript复制
scores[c("jimmy","nicker")]    ##取子集

jimmy nicker

100 59

代码语言:javascript复制
names(scores)[scores>60]     ##取出分数大于60的人的名字。

[1] "jimmy" "Damon" "Sophie"

# 删除变量 只能删除变量用,不能删除一个数据框的第几行或者第几列

代码语言:javascript复制
rm(l)                    ##删除一个
rm(df1,df2)              ##删除多个
rm(list = ls())          ###**删除全部

快捷键ctrl l ###清空控制台

#练习3-2 load("matchtest.Rdata")

#1.统计iris最后一列有哪几个取值,每个取值重复了多少次

代码语言:javascript复制
iris[,ncol(iris)]
table(iris[,ncol(iris)])
table(iris$Species)

#2.提取iris的前5行,前4列,并转换为矩阵,赋值给a。

代码语言:javascript复制
a <- as.matrix(iris[1:5,1:4])
a

#3.将a的行名改为flower1,flower2...flower5。

代码语言:javascript复制
rownames(a) <- paste0("flower",1:nrow(a))
a

#4.探索列表取子集l[2]和l[[2]]的区别(提示:数据结构)

代码语言:javascript复制
class(l[2])           #### [1] “list”
class(l[[2]])         #### [1] “matrix”“array”

七、数据框调整列的顺序

代码语言:javascript复制
a = read.csv("exercise.csv")
a = a[1:3,]
a
a[,c(1,3,2)]

0 人点赞