title: “R语言入门-数据框矩阵列表”
output: html_document
date: “2024-03-08”
knitr::opts_chunk$set(echo = TRUE,message=F,warning=F)
核心
数据框的来源、新建、属性、修改和连接
- 数据来源向量是一维的
- matrix(矩阵)的核心是二维,只允许一种数据类型 1和a不可放一起
- data.frame(数据框)的核心也是二维,每列只允许一种数据类型 平常的excel 数据表,所以数据框很重要
- list列表可装万物
不清楚时可以用class或is族函数确认
class(m)
数据框新建 主要思想:data.frame
df1 <- data.frame(gene = paste0("gene",1:4),
change = rep(c("up","down"),each = 2),
score = c(5,3,-2,-4)) #列名=每列的元素
df1
数据框读取 主要思想:read.csv
- 读取特定文件
df2 <- read.csv("gene.csv") #读取表格文件
- 读取R语言内置数据(例如iris、volcano)
iris #给一些分析做示例分析
volcano
letters
LETTERS # 前十三位letters[1:13] R语言内置数据(例如iris、volcano)
whitch(letters==M)
数据框查看/数据框读取 主要思想:对数据框特定向量或元素的查看/提取
dim(df1) #查看行列
nrow(df1) #查看行
ncol(df1) #查看列
rownames(df1) #查看列的名字
colnames(df1) #查看行的名字
数据框子集读取 主要思想:[]/$ []:二维读取 $:读取某列
# 按坐标
df1[2,2] #左行第二行,右列第二列
df1[2,]
df1[,2]
df1[c(1,3),1:2]#中括号里的逗号,表示维度的分割
# 按名字
df1[,"gene"]
df1[, c('gene','change')]
df1$gene #$读取基因名称为gene的这列
# 按条件(逻辑值)
df1[df1$score>0,]
#练习题 将数据框socer>0提取
df1 <- data.frame(gene = paste0("gene",1:4),
change = rep(c("up","down"),each = 2),
score = c(5,3,-2,-4))
df1
k = df1$score>0;k
## [1] TRUE TRUE FALSE FALSE
df1[k,]
## gene change score
## 1 gene1 up 5
## 2 gene2 up 3
df1[df1$score>0,] #简写
数据框的计算 主要思想:函数+(df1[])/函数+(df1$矩阵列名)
mean(df1$score)
max(df1$score)
数据框的修改 单个元素的修改 主要思想:X[提取元素] <- a/1/T
数据框的修改 某列向量的修改 主要思想:X$修改列名 <- c()
df1[3,3] <- 5 #改一个格
df1$score <- c(12,23,50,2) #改一整列
df1$p.value <- c(0.01,0.02,0.07,0.05) #增加一列 #有则改之无则新增
数据框表头名字修改 主要思想:rownames/colnames() <- ,,,
rownames(df1) <- c("r1","r2","r3","r4") #改行名和列名
colnames(df1)[2] <- "CHANGE" #只修改某一行/列的名
数据框的连接 主要思想:merge(test1,test2,by=“name”)
merge(test1,test2,by="name")
merge(test1,test3,by.x = "name",by.y = "NAME") #默认by.x=by.y
矩阵的操作 主要思想:操作形同数据框除了无法用$ 热图数据源!
- 矩阵可以转换成数据框 *as.data.frame()*没有赋值就没有变
m <- matrix(1:9, nrow = 3)
colnames(m) <- c("a","b","c") #加列名
m
dim(m)
colnames(m)
m[2,2]
m[,"c"]
m[m[, 2] > 4, 2] #仅仅挑选第二列>4的元素
m[m[, 2] > 4, ] #挑选出满足矩阵第二列>4的元素
mean(m[,"c"])
m[3,3] <- 5;m #改一个格
rownames(m) <- c("r1","r2","r3");m
pheatmap::pheatmap(m) #形成一一对应的关系
pheatmap::pheatmap(m,cluster_rows = F,cluster_cols = F)
m <- matrix(1:9, nrow = 3)
colnames(m) <- c("a","b","c") #加列名
m
as.data.frame(m)
class(m)
## > as.data.frame(m)
## a b c
## 1 1 4 7
## 2 2 5 8
## 3 3 6 9
## > class(m)
m <- as.data.frame(m)
class(m)
## [1] "matrix" "array"
## > m <- as.data.frame(m)
## > class(m)
## [1] "data.frame"
列表的新建和取子集
- 主要思想:列表展示的本质是像在展示一个一个的元素
- 列表的每个元素可以是任何形式
x <- list(m1 = matrix(1:9, nrow = 3),
m2 = matrix(2:9, nrow = 2))
x
## $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
- x[[1]] #列表取子集需要两个[] [[列表的元素的序号或名字]]
- xKaTeX parse error: Expected 'EOF', got '#' at position 4: m1 #̲列表取子集也可用 $+列表的元素名字
x[[1]]
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
x$m1
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
给元素赋予名字
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
scores["jimmy"]
## jimmy
## 100
scores[c("jimmy","nicker")]
## jimmy nicker
## 100 59
names(scores)[scores>60] #左是向量 右边是[]逻辑值 所以这是取子集的命令
#对names(scores)这个向量取子集,使用了scores>60判断出来的逻辑值
## [1] "jimmy" "Damon" "Sophie"
- 删除tips
rm(l) #删除一个
rm(df1,df2) #删除多个
rm(list = ls()) #删除全部
ctrl+l #清空控制台,也可以选择environment右上角的小扫帚
引自生信技能树课程,感谢小洁老师!