一、向量、矩阵、数据框和列表的区别
1)向量:一维
2)矩阵:二维,只允许一种数据类型
3)数据框:二维,每列只允许一种数据类型
4)列表:容纳各种数据类型
ps:数据类型的判断:clss()
数据类型的转化:as.data.frame/ as.matrix
二、数据框
(1)数据框的来源:
a 新建
b as.data.frame转化
c 读取表格文件 read.csv()
d 内置数据集如 iris,mtcars
(2)新建数据框:
1、data.frame()
2、read.csv(" ") ⚠️文件在当前的工作路径中可以直接使用文件名,否则需要使用绝对路径,否则就会报错。
(3)数据框的属性
获得行数 nrow()
获得列数 ncol()
获得行名 rownames()
获得列名 colnames()
(4)数据框取子集
>数据框名称 $ 列名 eg. df1$gene
#按坐标 df1[2,2] 取出一个格子
#按行. df1[1, ] 后面空取一行
#按列. df1[ ,2] 前面空取一列
#某几行,几列.
> df1
gene change score
1 gene1 up 5
2 gene2 up 3
3 gene3 down -2
4 gene4 down -4
> df1[c(1,3),1:2]
gene change
1 gene1 up
3 gene3 down
(取了第一、三行的1~2列)
‼️使用取子集的方法筛选
eg:筛选score大于0的行
> df1[df1$score>0,]
gene change score
1 gene1 up 5
2 gene2 up 3
(先按逻辑取子集,T对应的行留下,F对应的删掉)
(5)数据框修改
1、改一个格
> df1[3,3]<-5
> df1
gene change score
1 gene1 up 5
2 gene2 up 3
3 gene3 down 5
4 gene4 down -4
(先使用中括号取出来再赋值)
2、改一整列
> df1$score<-c(12,23,50,2)
> df1
gene change score
1 gene1 up 12
2 gene2 up 23
3 gene3 down 50
4 gene4 down 2
(使用💲取出一列重新赋值)
3、增加一列
> df1$p.value<-c(0.01,0.02,0.07,0.05)
> df1
gene change score p.value
1 gene1 up 12 0.01
2 gene2 up 23 0.02
3 gene3 down 50 0.07
4 gene4 down 2 0.05
(💲后加上要增加新列的列名)
4、修改行名和列名
行名修改:rownames(数据框的名称)<-c() #重新赋值
名列名修改:colnames(数据框的名称)<-c()
改一个行名或列名: colnames(数据框名称)[列数]<-"重命名 "
rownames(数据框名称)[行数]<-"重命名"
5、数据框的连接
(新建数据框)
> test1<-data.frame(name=c("jimmy","niker","Damon","Sophie"),blood_type=c("A","B","O","AB"))
> test1
name blood_type
1 jimmy A
2 niker B
3 Damon O
4 Sophie AB
> test2<-data.frame(NAME=c("Damon","jimmy","niker","tony"),weight=c(140,145,110,138))
> test2
NAME weight
1 Damon 140
2 jimmy 145
3 niker 110
4 tony 138
(连接数据框,根据共有的列名, by.x写第一个列名,by.y写第二个)
> merge(test1,test2,by.x = "name",by.y = "NAME")
name blood_type weight
1 Damon O 140
2 jimmy A 145
3 niker B 110
三、矩阵
(1)新建和取子集
matrix(1:n,nrow=, nco=) ⚠️默认数据按列先排列,若要按行排列,记得输入byrow=TRUE
eg:
> m<-matrix(1:9,nrow = 3,ncol = 3)
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
(2)转置(行变列,列变行)
t(矩阵名称)
eg:
> t(m)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
(3)矩阵和数据框的转化
as.data.frame()
as.matrix()
最后用class() 明确一下数据类型
(4)矩阵画热图
四、列表
(1)列表的新建
> l<-list(m1=matrix(1:9,3,3),m2=matrix(2:9,2,4))
> l
$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
❓当把"m1="换成"m1<-" ,$m1 会变成 [[1]]
⚠️(2)列表的取子集(注意数据类型)
l[1] 取出数据是列表
l[[1]] / l 💲m1 取出数据是matrix或array
> class(l[1])
[1] "list"
> class(l[[1]])
[1] "matrix" "array"
> class(l$m1)
[1] "matrix" "array"
补充知识点
1)元素的命名(使用names给向量命名)
> 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
‼️names()是对向量的命名,即加上名字的属性,并不是加了一行,class(scores)还是numeric的向量!!
a 使用名称查找 scores["jimmy"]
b 筛选出分数大于60的名字 names(scores)[scores>60]
> names(scores)[scores>60]
[1] "jimmy" "Damon" "Sophie"
网友评论