超纲练习题不超纲

2022-06-27 20:19:25 浏览数 (1)

我们的生信入门班和数据挖掘线上直播课程已经有了三年多的历史,培养了一波又一波优秀的生信人才。本期分享的内容不是课堂上讲的,而是给了踮一踮脚能做出来的超纲练习题,启发学员主动学习,而不是一味等待投喂。

下面来看优秀学员徐谦同学的分享:

R语言超纲练习题

(生信技能树优秀学员徐谦)

这是目前马拉松授课线上直播课程的一道R语言部分的拓展题,最近的一期是下周一开课哦:

  • 数据挖掘(GEO,TCGA,单细胞)2022年6月场,快速了解一些生物信息学应用图表
  • 生信入门课-2022年6月场,你的生物信息学第一课

看到班里有同学写了超纲题解法,思路很赞,不过现在已经不超纲了,接下来的GEO课程小洁老师肯定也会强调这一常规操作,下面就针对性提出两种新的思路作为参考:

一、merge

不管soft和exp中的ID是否一直,直接交叉合并,不需再进行%in%和排的操作,代码如下:

代码语言:javascript复制
exp <- read.csv("exp.csv")
anno <- read.table("soft.txt",header = T,sep = "t")###注释文件和表达矩阵探针名对应的列名保持一致
colnames(exp)[1] <- "ID" 
exp_new <- merge(exp,anno,by="ID")
##按照一样的理念,只保留第一次出现的基因名
exp_new <- exp_new[!duplicated(exp_new$GeneName),]
rownames(exp_new) <- exp_new$GeneName ###基因名变为行名
exp_new <- as.matrix(exp_new[,2:7])###转换为矩阵

二、祭出我们的神器tidyverse

对重复基因的处理,我个人实际操作中更倾向去取平均值最大的一行。这样就可以用神器dplyr和其他包来做,可以说Hadley大神改变的R的生态。具体代码如下,一步一步运行下就知道怎么来的了,可以选中管道符之前的代码,按Ctrl Enter,这样没选中的代码就不运行了,挨个加上去看管道符操作了什么:

代码语言:javascript复制
library(dplyr)
library(tibble)
colnames(exp)[1] <- "ID"
exp_new <- exp %>% 
  #合并探针的信息
  inner_join(anno,by="ID") %>% 
  #去掉多余信息,select支持按列名和列号同时选择
  select(c(GeneName,2:7)) %>%  
  #·增加一列,内容为每一行的平均数
  mutate(rowMean =rowMeans(.[,-1])) %>% 
  #把表达量的平均值按从大到小排序
  arrange(desc(rowMean)) %>% 
  # 去重,GeneName留下第一个
  distinct(GeneName,.keep_all = T) %>% 
  #GeneName转换为行名
  column_to_rownames(var="GeneName") %>% 
  #反向选择去掉平均值的那一列
  select(-rowMean)

管道符后面的.可以代表管道符前面传入的数据,如果调用tidyverse的函数应该都是可以省略的,默认第一个参数,如果调用其他函数,用.代替就行。结果如下:

思想来自果子老师。

0 人点赞