生信技能树数据挖掘课程学习笔记
Vector 向量——一维
matrix 矩阵——二维、所有列的数据类型相同,两个维度(行数和列数)
data.frame 数据框——多个长度相同、数据类型可以不同的向量按列组合
List 列表——长度可以不同、数据类型可以不同 没有行和列的概念,可以有多级元素(列表没有预览视图)
作图要处理的数据绝大多数在数据框
1.数据框来源
(1)在R中新建 (2)由已有数据转换或处理得到 (3)从文件中读取 (4)内置数据集
2.新建数据框 本质上是向量按列组合
df <- data.frame(gene = paste0("gene",1:3),
sam = paste0("sample",1:3),
exp = c(32,34,45))
读取数据框df2 <- read.csv("gene.csv")
3.数据框属性描述
- 维度(有几行几列)
dim(df) /nrow(df) /ncol(df)
- 行名/列名
rownames(df)/colnames(df)
4.数据框取子集(一个、一行、一列)
4.1 选一整行df [ 2 , ]
选一整列df[,2]
行列双选df[c(1,3),1:2]
4.2 根据行名或列名df[,c(“gene”,“exp”)]
当行数和列数很多时,这个操作就很有用 。
df[,-ncol(df)]
去掉最后一列
4.3 提取列的常用操作 数据框常用操作: df$exp
5.数据框编辑 取子集$或[] +赋值操作
- 改一个格
df[3,3]<- 5
- 改一整列
df$exp<-c(12,23,50)
(如果没有 就是新增的列) - 修改行名和列名 改全部行名
rownames(df) <- c("r1","r2","r3")
改一个行名rownames(df)[2] = "x"
6.数据框进阶
(1)行数较多的数据框可截取前/后几行查看 head(iris)
(2)行列数都多的数据框可取前几行前几列查看`iris[1:3,1:3]
(3) 查看每一列的数据类型和具体内容str(iris)
(4)去除含有缺失值的行:na.omit(df)
仅按照某一列来去除缺失值、缺失值替换:tidyr包
(5)两个表格的连接:
- 按列连接:cbind(行数相同)
- 按行连接:rbind(列数相同)
- 有共同的列名
merge(test1,test2,by="name")
merge(test1,test3,by.x = "name",by.y = "NAME")
(6)如果列名顺序错乱,如何按照指定顺序重排?
step1: 生成示例数据框
df=data.frame(matrix(rnorm(15),ncol=5)) colnames(df)=letters[c(3,1,2,5,4)] df ## c a b e d ## 1 0.0791991 0.2823956 1.5775594 0.3532114 0.005290532 ## 2 0.1520918 -0.5809870 0.7543086 0.2400143 -0.107861008 ## 3 0.1016834 -0.5116693 -0.6895286 -0.5309626 -0.300314420
step2: 写出正确顺序
s=letters[1:5] s ## [1] "a" "b" "c" "d" "e"
step3:match排列,生成索引
sy=match(s,colnames(df))#按照s的顺序来排df sy ## [1] 2 3 1 5 4
step4:取子集
df2=df[,sy] df2 ## a b c d e ## 1 0.2823956 1.5775594 0.0791991 0.005290532 0.3532114 ## 2 -0.5809870 0.7543086 0.1520918 -0.107861008 0.2400143 ## 3 -0.5116693 -0.6895286 0.1016834 -0.300314420 -0.5309626
矩阵
新建m <- matrix(1:9, nrow = 3)
和取子集[ ]
转置(行变列,列变行)t(m)
转换为数据框as.data.frame(m)
画热图pheatmap::pheatmap(m,cluster_cols = F,cluster_rows = F)
列表
新建
l <- list(m = matrix(1:9, nrow = 3),
df = data.frame(gene = paste0("gene",1:3), sam = paste0("sample",1:3), exp = c(32,34,45)),
x = c(1,3,5))
取子集l[[2]]
l$df
删除变量
删除一个rm(l)
删除多个rm(df,m)
删除全部 rm(list = ls())
清空控制台 ctrl+l
数据结构的总结
新建 | 取子集 | |
---|---|---|
向量 x | x<-c( ) |
x[n] 修改元素 |
数据框 df | df<-data.frame( ) |
df[x,y] df[x,] ,df[,y] $ 新增列,修改 |
矩阵 m | m<–matrix( ) |
m[x,y] |
列表 l | l<-list( ) |
l[[n]] $ |
元素的“名字”-names()
可根据名字提取子集, 向量、数据框、列表通用。