前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生信马拉松 Day3

生信马拉松 Day3

原创
作者头像
阿呆的月历
修改2024-01-12 13:32:14
2790
修改2024-01-12 13:32:14
举报
文章被收录于专栏:生信马拉松生信马拉松

今天延续Day2讲完了全部的几个重要数据类型,都是后续生信分析非常重要的知识点以及小Tips,同时深深感受到代码思维的重要性。要写能换个环境和场景依然可运行的代码,而不是一次性的玩意儿

总览

“向量”一维

matrix 矩阵——二维,只允许一种数据类型

data.frame 数据框——二维,每列只允许一种数据类型

list 列表——可装万物

首先是最重要的数据框

数据框来源

(1)用代码新建

(2)由已有数据转换或处理得到

(3)读取表格文件

(4)R语言内置数据

1.新建和读取数据框

代码语言:R
复制
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.数据框的属性

数据框的维度是行数和列数

代码语言:R
复制
dim(df1)
nrow(df1) #有多少行
ncol(df1) #有多少列

rownames(df1) #取行名
colnames(df1) #取列名

3.数据框取子集

代码语言:R
复制
df1$score  #删掉score,按tab键可以选择其他列名
mean(df1$score) #对df1$score取平均值
## 按坐标
df1[2,2]
df1[2,]
df1[,2]
df1[c(1,3),1:2]
## 按名字
df1[,"gene"]
df1[,c('gene','change')]   #这个方法相比$的优点是易读+可以提取多列

4.数据框修改

代码语言:R
复制
#改一个格
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"

5.两个数据框的连接

merge真的不要太常用,但是实操两个数据集对应的列名不一样的时候,就好容易忘记其实可以写在参数里╭(╯^╰)╮

代码语言:R
复制
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") 
#这里by.x对应写的第一个数据集,by.y对应第二个数据集
#除了merge之外,tidyr包的left-join也是很常用的合并函数
#处理生信文件的时候两者差别不大,但应对文字信息的数据清洗,left-join更少报错

6.按逻辑值筛选数据库的数据

代码语言:R
复制
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的基因名
df1[df1$score > 0,1]
df1$gene[df1$score > 0]

矩阵和列表

代码语言:R
复制
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)
#列表
x <- list(m1 = matrix(1:9, nrow = 3),
          m2 = matrix(2:9, nrow = 2))
x

x[[1]]
x$m1
#x[[1]]是matrix,x[1]是list

TIPS

1.神奇的利用循环补齐 取特定数据

代码语言:R
复制
x=1:8;x
#[1] 1 2 3 4 5 6 7 8

x[c(T,F)]   #利用循环补齐取出奇数位的数据
#[1] 1 3 5 7

x[c(F,T)]   #利用循环补齐取偶数位的数据
[1] 2 4 6 8

2.代码思维取数据框的最后一列,以及除了最后一列以外的其他列

这个在实际写代码的时候真的很容易忘记,当时急着用写上数字后面copy到其他数据里就要反复改

代码语言:R
复制
df1[,ncol(df1)]
df1[,-ncol(df1)]

3.删除

其实偶尔也会有删除单个变量的需求,很实用的小代码

代码语言:R
复制
rm(x)
rm(df1,df2)
rm(list = ls()) 

4.其他读series.matrix文件的函数

代码语言:R
复制
a=read.delim('GSE217012_Normalized_RPKM_LOG2_matrix.txt.gz') 
#以前只知道用read.table加很多参数来读,这个还挺新奇的

5.默认的heatmap函数只能对matrix进行作图

(这个以前从来没注意过,都是无脑转data.frame,matrix分析的时候很容易报错,今天小洁老师特地讲了series matrix读取之后可以用as.matrix转换,好奇后续的作用,盲猜可能是有时分析和作图需要对数据转置,但是那些函数往往会自动把dataframe转化为matrix,之前分析的时候倒是感觉要记得把自动变格式的数据转回来是要点,有点期待~)

生信技能树 生信马拉松

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总览
  • 首先是最重要的数据框
    • 1.新建和读取数据框
      • 2.数据框的属性
        • 3.数据框取子集
          • 4.数据框修改
            • 5.两个数据框的连接
              • 6.按逻辑值筛选数据库的数据
              • 矩阵和列表
              • TIPS
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档