一、数据框
来源:
1.用代码新建
2.由已有数据转换或处理得到
3.读取表格文件
4.R语言内置数据
1、新建、读取数据框
df1 <- data.frame(gene = paste0("gene",1:4),
change = rep(c("up","down"),each = 2),
score = c(5,3,-2,-4))
df1
df2 <- read.csv("gene.csv")
df2
2、数据框的属性—维度(行数、列数)
1 2 3
dim(df1) nrow(df1) ncol(df1)
3、数据框取子集、修改、连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
df1$gene #删掉score,按tab键试试
mean(df1$score)
## 按坐标
df1[2,2]
df1[2,]
df1[,2]
df1[c(1,3),1:2]
## 按名字
df1[,"gene"]
df1[,c('gene','change')]
## 按条件(逻辑值)
df1[df1$score>0,]
#如何取数据框的最后一列?
df1[,ncol(df1)]
#如何取数据框除了最后一列以外的其他列?
df1[,-ncol(df1)]##减号代表反转
#筛选score > 0的基因
df1[df1$score > 0,1]
df1$gene[df1$score > 0]
##修改
#改一个格
df1[3,3] <- 5
df1
#改一整列
df1$score <- c(12,23,50,2)
df1
#加一列
df1$p.value <- c(0.01,0.02,0.07,0.05)
df1
#改行名和列名
rownames(df1) <- c("r1","r2","r3","r4")
#只修改某一行/列的名
colnames(df1)[2] <- "CHANGE"
重命名列名 dplyr::rename()
my_data %>%rename(sepal_length = Sepal.Length,sepal_width = Sepal.Width)
##连接
merge(data.frame1,data.frame2,by="name")
merge(data.frame1,data.frame3,by.x = "name",by.y = "NAME")
二、矩阵
1
2
3
4
5
6
7
8
9
10
m <- matrix(1:9, nrow = 3)
colnames(m) <- c("a","b","c") #加列名
m
m[2,]
m[,1]
m[2,3]
m[2:3,1:2]
m
t(m)
as.data.frame(m)
三、列表
1
2
3
4
5
6
7
8
9
l <- list(m1 = matrix(1:9, nrow = 3),
m2 = matrix(2:9, nrow = 2))
l
l[[2]]
l$m1
l = list()
l[[1]] = iris[1:50,]
四、其他
1.取交集会去重复,而%in%取子集不会去重复
2.代码不报错,不代表真的没错,要检查目的是否达到
3.不要用眼睛运行代码
4.矩阵和数据框的区分:根据生成它的函数;用class或is族函数判断
5.矩阵和数据框的属性就是行数和列数
6.$代表从属关系
7.中括号里的逗号,表示维度的分割
8.数据框按照逻辑值取子集,TRUE对应的行/列留下,FALSE对应的行/列丢掉
9.矩阵不支持$
代码均来自生信技能树小洁老师