一、数据框

来源:
1.用代码新建
2.由已有数据转换或处理得到
3.读取表格文件
4.R语言内置数据

1、新建、读取数据框

  1. df1 <- data.frame(gene = paste0("gene",1:4),
  2. change = rep(c("up","down"),each = 2),
  3. score = c(5,3,-2,-4))
  4. df1
  5. df2 <- read.csv("gene.csv")
  6. 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.矩阵不支持$

代码均来自生信技能树小洁老师

滴水穿石