前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >五、数据结构--矩阵、列表

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

原创
作者头像
叮当猫DDM
修改2023-02-27 15:14:28
6720
修改2023-02-27 15:14:28
举报
文章被收录于专栏:叮当猫学生信叮当猫学生信

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

矩阵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)]

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 矩阵的来源
    • # 1.由数值型数据框转换
      • # 2.由向量改变维度而来
        • # 3. 由向量拼接而来
          • #4.内置
          • 一、矩阵新建
          • 二、矩阵取子集
          • 三、加列名
          • 四、转置
          • 五、矩阵画热图
          • 六、新建列表和取子集
          • 七、数据框调整列的顺序
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档