上次作业:
代码语言:r复制#向量g中有多少个元素在向量s中存在(要求用函数计算出具体个数)?将这些元素筛选出来
#提示:%in%
length(g %in% s) # 错误,因为%in%产生的逻辑值中,T和F都存在,所以都会被计算个数,相当于length计算的是逻辑值的个数
g[g %in% s]
#正确答案
table(g %in% s)
sum(g %in% s) # sum也可以
length(intersect(g,s)) #交集会去掉重复
g[s %in% g] #只对s负责,和g没有关系
#生成10个随机数: rnorm(n=10,mean=0,sd=18),用向量取子集的方法,取出其中小于-2的值
a = rnorm(n=10,mean=0,sd=18);a
a[a<-2] # 错误,<- 是赋值的符号
#正确答案
a[a<(-2)] # 拆开<-
a[a< -2] # 拆开<-
一维:向量
二维:
- 矩阵matrix 只有一种数据源类型
- 数据框 data.frame 每列只有一种数据类型
list列表:可以装的下一切(数据,向量,矩阵,数据框)
数据框 新建
- 新建数据框data.frame()
- 读取数据框 read.csv()
> df1 <- data.frame(gene = paste0("gene",1:4),
change = rep(c("up","down"),each = 2),
score = c(5,3,-2,-4))
> df1
gene change score
1 gene1 up 5
2 gene2 up 3
3 gene3 down -2
4 gene4 down -4
代码语言:r复制> df2 <- read.csv("gene.csv")
> df2
gene change score
1 gene1 up 5
2 gene2 up 3
3 gene3 down -2
4 gene4 down -4
数据框的属性
代码语言:r复制> dim(df1)# 列和行分别有几个子集
> nrow(df1)# 有几个子集行
> ncol(df1)# 有几个子集列
> rownames(df1)# 行分别有几个子集名字
[1] "1" "2" "3" "4"
> colnames(df1)#列分别有几个子集名字
[1] "gene" "change" "score"
取子集
- $
- 按照坐标:数据框[ 行 , 列 ]
- 按照名字:数据框[ “行名字” , “列名字” ]
- 按照逻辑值:数据框$
> df1[2,2]
[1] "up"
> df1[2,] # 逗号的左边的数字,是取第二行
gene change score
2 gene2 up 3
> df1[,2] # 逗号的右边的数字,取第二列
[1] "up" "up" "down" "down"
> df1[c(1,3),1:2] # 逗号前的第一和第三行,逗号后的第一列到第二列
gene change
1 gene1 up
3 gene3 down
> k = df1$score>0;k
[1] TRUE TRUE FALSE FALSE
> df1[k,] # [ ] 取ture对应的子集,按照逻辑值取子集,所以保留了score>0的数据
gene change score
1 gene1 up 5
2 gene2 up 3 #因为是一个矩阵,所以要有逗号来区分行和列
数据的修改
- 修改一个数据
文件名[第几行 ,第几列] = 赋值修改后的数据
- 修改一个列的数据
文件名$列名 = c()赋值修改后的向量(先提取一个列$,再修改)
- 增加一列的数据
文件名$列名 = c()赋值修改后的向量($提取的是一个全新的列名,之前不存在的)
- 修改行名
rownames() = c()赋值修改后的向量 (行名都是一样的)
- 修改其中一列的列名
colnames(文件名)[第几列]= “”赋值列的名字(每一列名字都不一样)
两个数据框的连接:
- merge(数据框1,数据框2,by = “共同列的名字”) (有一个相同列的名字)
- merge(数据框1,数据框2,by.x = “x列的名字”, by.y = “y列的名字”) (没有相同的列的名字)
矩阵 新建 (不适用$提取)
m = matrix(向量,nrow = 分成多少行就写几的数字 )
矩阵的行 列 写成了[]形式
代码语言:r复制> m <- matrix(1:9, nrow = 3) # 1:9 是一个向量,把他们排成三行
> m
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
矩阵取子集m[x,y]
矩阵的转置和转换 t()
转置(将行和列互转,要先给列改名,不然转置没有区别
代码语言:r复制> colnames(m) <- c("a","b","c") #加列名 不支持$取
> m
a b c
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> t(m) # 转置行和列
[,1] [,2] [,3]
a 1 2 3
b 4 5 6
c 7 8 9
转换为数据框 m = as.data.frame()
可以用class来判断是否转换成功
list列表 新建
代码语言:r复制> 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
取子集:
- 用$
- [ [] ]
删除变量
删除一个:rm()
删除多个:rm( , )
删除全部:rm(list = ls())
清空控制台:contral l
- 如何判断是矩阵还是数据框
- 根据生成她的函数
- 用class和is族函数判断
- pheatmap::pheatmap(m)
- 给元素补充名字
names() = c("")
生信技能树 day3 上课笔记