• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    教学以及管理操作教程

    教学以及管理操作教程

    ¥1,000.00 ¥100.00
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      教学以及管理操作教程

      教学以及管理操作教程

      ¥1,000.00 ¥100.00
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      生信星球

      • 首页
      • 博客
      • 生信星球
      • 「帮豆豆」再说R语言没有用,打你

      「帮豆豆」再说R语言没有用,打你

      • 发布者 weinfoeditor
      • 分类 生信星球
      • 日期 2019年9月25日
      测试开头


       今天是生信星球陪你的第458天


         大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~

         就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~

         这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!

      花花写于2019-09-25

      豆豆导读

      今天处理数据的时候,遇到了一个问题,单细胞的表达矩阵里面有些基因是重复多次的,重复基因都加了后缀xxx_locn,需要去重,把每个基因的表达量求和。
      例如“OTTMUSG00000016609”这个基因在原始矩阵中出现了6次,有6行,我们需要只保留一行,对这六行的每一列分别求和:

      「帮豆豆」再说R语言没有用,打你


      变成:


      「帮豆豆」再说R语言没有用,打你

      (一篇文章里这么做的,这个方法不适用于GEO转录组什么的,但是可以拿来学R啊)

      这样的基因有很多个,我还不想改变基因的顺序。被难住了,求助我们家R语言小神仙、万能小伙伴、超级无敌小女朋友花花!(自愿夸奖)

      因为她说过,能放进数据框里的需求都难不倒她,这个记录至今没有打破过,她膨胀,这篇帖子就是她帮我解决问题的记录啦(被拉来写导读)。出神入化的R语言技巧学起来!

      思路

      这个问题本质上就是个R语言数据框问题,那就直接撸袖子上了。写这个代码差不多花了半小时~有点难度~~~

      1.行名不能有重复,干脆把基因名作为第一列X。

      2.首先需要匹配第一列X里面以_loc加数字结尾的并删掉,只留基因名,stingr配正则值得拥有,这个操作不光stringr可以做,tidyr里的seprate分隔列,然后只留第一列,也能做到。

      (吐槽一下, 想找我的R数据科学对应stringr的笔记,结果发现简书把我文章封了,我自己都看不了,气死了。)

      3.重复的基因只留第一个,duplicated和unique都可以,然后修改这一行的内容为该基因几个表达量的和。

      4.想过summarise配group_by,失败。想过apply,也不好做,最后优秀的只有for循环!

      代码实现

      1.示例数据

      在生信星球后台回复"合并"即可获得示例数据。

      options(stringsAsFactors = F)
      df = read.csv("help.csv")
      dim(df)
      #> [1] 19972   501
      df[1:4,1:4]
      #>          X V3 V4 V5
      #> 1  Tspan12  0  0  0
      #> 2    Tshz1  3  1  0
      #> 3   Fnbp1l  3  1  6
      #> 4 Adamts15  0  0  0

      df的第一列是基因名,后面500列是表达量。

      x = df[,1]
      head(x,10)
      #>  [1] "Tspan12"       "Tshz1"         "Fnbp1l"        "Adamts15"     
      #>  [5] "Cldn12"        "Rxfp1"         "2310042E22Rik" "Sema3c"       
      #>  [9] "Jam2"          "Apbb1ip"

      2.删除重复基因的后缀

      正则表达式匹配后缀,我翻笔记就是为了找这个,d表示匹配任意数字。

      if(!require(stringr)) install.packages("stringr")
      #> Loading required package: stringr
      library(stringr)
      #删掉重复基因的后缀
      df$X = str_replace(df$X,"_loc\d","")

      有重复的基因有多少个呢?这就决定了下面的for循环要跑多少次。

      y = unique(df$X[duplicated(df$X)])
      length(y)
      #> [1] 111

      3.生成结果,一个新的数据框

      先将df直接去重,得到df2。

      df2 <- df[!duplicated(df$X),]
      dim(df2)
      #> [1] 19806   501

      现在要做的是,用df每个基因每列(多行)的表达量和,填充df2对应的基因(一行)的值!

      我用的方法是把每个基因单独提取出来作为一个数据框,colSums求列和,然后将列和填充到df2里面去!这是一个天生优秀的数据框取子集和修改搭配for循环的操作,哈哈,测试了一下时间6秒多,阔以。

      system.time(for(i in y) {
        a <- df[df$X == i,]
        b <- colSums(a[,-1])
        names(b) <- NULL
        df2[df2$X == i,-1] <- b
      })
      #>    user  system elapsed 
      #>    6.05    0.09    6.17

      最后检查一下对不对,随便拿一个重复基因来试试。

      sum(df2[df2$X==y[1],501])
      #> [1] 11

      sum(df[df$X==y[1],501])
      #> [1] 11

      yeah!请豆豆同学给我买麦旋风和蓝莓派。


      向大家隆重推荐隔壁生信技能树的一系列干货!

      全球公益巡讲、招学徒

      B站公益74小时生信工程师教学视频合辑


      点击底部的“阅读原文”,获得更好的阅读体验哦😻

      初学生信,很荣幸带你迈出第一步。

      我们是生信星球,一个不拽术语、通俗易懂的生信知识平台。由于是2018年新号,竟然没有留言功能。需要帮助或提出意见请后台留言、联系微信或发送邮件到jieandze1314@gmail.com,每一条都会看到的哦~

      「帮豆豆」再说R语言没有用,打你


      测试结尾

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoeditor

      上一篇文章

      CentOS 8正式发布 基于Fedora 28和内核版本4.18
      2019年9月25日

      下一篇文章

      PCA如何去除表达矩阵中的技术噪音
      2019年9月26日

      你可能也喜欢

      8-1651673488
      生信零基础入门学习小组长期报名中(2022仍继续)
      7 4月, 2022
      2-1651673738
      简化版的ROC曲线
      21 2月, 2022
      8-1651674718
      支持向量机模型
      19 11月, 2021

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?