1.data.frame来源
(1)用代码新建 data.frame()
(2)由已有数据转换或处理得到 matrix-->data.frame
(3)读取表格文件-read()
(4)R语言内置数据(iris、volcano)
2.新建和读取data.frame
2.1 新建data.frame
代码语言:javascript复制df1 <- data.frame(gene = paste0("gene",1:4),
change = rep(c("up","down"),each = 2),
score = c(5,3,-2,-4)) # “=”左边为列名,右边为列的内容
df1
2.2 读取data.frame-以read()
函数为主
df2 <- read.csv("gene.csv") # read.csv()读取csv文件函数
df2
3.data.frame的属性
3.1 维度 dim(df1)
3.2 行数 nrow(df1)
3.3 列数 ncol(df1)
3.4 行名 rownames(df1)
3.5 列名 colnames(df1)
4.data.frame取子集 -"$"符 df1$gene
4.1 按坐标
代码语言:javascript复制df1[2,2] #[ ]内前面的数字为行,后面的数字为列
df1[2,] #提出第二行(包含行名)
df1[,2] #提出第二列
df1[c(1,3),1:2] #提出第1和3行,第1-2列
4.2 按名字
代码语言:javascript复制df1[,"gene"]
df1[,c('gene','change')]
4.2 按条件(逻辑值)
代码语言:javascript复制df1 <- data.frame(gene = paste0("gene",1:4),
change = rep(c("up","down"),each = 2),
score = c(5,3,-2,-4))
df1[df1$score>0,] #提取score>0的行
4.3 筛选score > 0的基因
代码语言:javascript复制df1[df1$score > 0,1] #提取第1列中score>0的基因名
df1$gene[df1$score > 0] #同上 提取gene列中score>0的基因名
代码语言:javascript复制★拓展内容
1.提取data.frame的最后一列
df1[,3]
df1[,ncol(df1)] #ncol()可以输出列数,所以为最后一列
代码语言:javascript复制2.提取data.frame除最后一列的其他列
df1[,-ncol(df1)] #"-"表示反选,“!”处理逻辑型数据
代码语言:javascript复制3.按照data.frame的某一列对整个data.frame进行排序--利用
order()
函数
df1[order(df1$score),] #默认为升序
df1[order(df1$score, decreasing = T),] #降序排列
代码语言:javascript复制4.按照data.frame的某一列对整个data.frame进行去重--利用
distinct()
函数
library(dplyr)
df1 <- df1 %>% distinct(score,keep_all = T) #%>%为向右操作符
df1
5.data.frame修改
5.1 改一个格 e.p df1[3,3] <- 5
5.2 改一整列 e.p df1$score <- c(12,23,50,2)
5.3 增加新一列 e.p df1$p.value <- c(0.01,0.02,0.07,0.05)
5.4 改所有行/列名 即给向量重新赋值
e.p rownames(df1) <- c("r1","r2","r3","r4")
5.5 只修改某一行/列的名 e.p colnames(df1)[2] <- "CHANGE"
改所有行名
6.两个data.frame连接
代码语言:javascript复制test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'),
blood_type = c("A","B","O","AB"))
test1
test2 <- data.frame(name = c('Damon','jimmy','nicker','tony'),
group = c("group1","group1","group2","group2"),
vision = c(4.2,4.3,4.9,4.5))
test2
test3 <- data.frame(NAME = c('Damon','jimmy','nicker','tony'),
weight = c(140,145,110,138))
test3
merge(test1,test2,by="name")
merge(test1,test3,by.x = "name",by.y = "NAME")#x对应test1,y对应test3
#如果需要data.frame合并保留不完整数据?merge()查询帮助文档
7.Matrix和List
7.1 Matrix
7.1.1 新建matrix: m <- matrix(1:9, nrow = 3)
7.1.2 给matrix加列名: colnames(m) <- c("a","b","c")
7.1.3 matrix提取--不支持"$"提取
代码语言:javascript复制m[2,]
m[,1]
m[2,3]
m[2:3,1:2]
7.1.4 matrix行与列名转置: t(m)
7.2 List
7.2.1 新建list
代码语言:javascript复制l <- list(m1 = matrix(1:9, nrow = 3),
m2 = matrix(2:9, nrow = 2))
l
7.2.2 list提取
方法一: l[[2]]
提取第二个matrix
方法二: l$m2
提取第二个matrix
拓展知识:
l[1]
与l[[1]]
的区别
class(l[1])
仍然是一个list
class(l[[1]])
提取的是一个matrix
8.补充知识--向量中元素的名字和R中删除操作
8.1 向量中元素的名字
代码语言:javascript复制scores = c(100,59,73,95,45)
names(scores) = c("jimmy","nicker","Damon","Sophie","tony") #给元素加名字
scores # 仍然是数值型向量
scores["jimmy"] #提取jimmy的分数
scores[c("jimmy","nicker")]
names(scores)[scores>60] #提取scores>60的names
8.2 删除
代码语言:javascript复制rm(l) #删除list
rm(df1,df2) #删除data.frame
rm(list = ls()) #删除全部环境变量=清空
以上内容均引用自生信技能树