前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「R」针对重复ID的处理

「R」针对重复ID的处理

作者头像
王诗翔呀
发布2021-08-06 16:12:52
1.6K0
发布2021-08-06 16:12:52
举报
文章被收录于专栏:优雅R优雅R

重复,特别是针对一些样本名称的重复问题的处理,是我在进行生信分析时经常遇到的。一种常见的解决策略是先找到重复之处,然后去重。但如果我们想要保留全部的重复ID呢?

一个简单的例子

生成一个非常简单的带重复的序列:

代码语言:javascript
复制
r$> data = c("a", "b", "c", "d", "a")                                                                                   

r$> data                                                                                                                
[1] "a" "b" "c" "d" "a"

这里a 重复了,如果我们去重,可能会选择2种办法。

保留唯一值

代码语言:javascript
复制
r$> unique(data)                                                                                                        
[1] "a" "b" "c" "d"
# 或者
r$> data[!duplicated(data)]                                                                                             
[1] "a" "b" "c" "d"

完全去重

代码语言:javascript
复制
r$> tb = table(data)                                                                                                    

r$> tb[tb > 1]                                                                                                          
a 
2 

r$> data[!data %in% names(tb[tb > 1])]                                                                                  
[1] "b" "c" "d"

如何保留信息又能看出重复

去重意味着数据的丢失,这种丢失在实际工作中有可能不能容忍。虽然是同样的ID,但它有可能关联多种可能的事件。例如,一个肿瘤患者,它可以有肿瘤和正常两种组织的样本,这可能写在不同的行。亦或者肿瘤样本有不同的位置来源的信息等等,但共用一个样本ID。

解决的思路是对重复ID添加标记,可以是前缀或者后缀,这样既能视觉上识别,也能够通过编程的手段识别或者后续对前后缀裁剪。后缀才容易操作,更为推荐。

首先介绍第一种方法:

代码语言:javascript
复制
r$> ave(data, data, FUN = function(i) paste0(i, '_', seq_along(i)))                                                     
[1] "a_1" "b_1" "c_1" "d_1" "a_2"

此处先对同名ID进行分组,然后利用函数分别添加数字后缀。

如果我们仅想要标记出第二次及以后出现的ID,这样能保留大部分的数据不做改动,怎么操作呢?

R自带了make.unique()解决这个问题!

代码语言:javascript
复制
r$> make.unique(data)                                                                                                   
[1] "a"   "b"   "c"   "d"   "a.1"

r$> make.unique(data, sep = "_")                                                                                        
[1] "a"   "b"   "c"   "d"   "a_1"

我用了4年多R都不知道这个函数~只是你想不到,所以你没找到。。。

参考:https://stackoverflow.com/questions/48825010/add-specific-characters-to-duplicated-strings[1]

参考资料

[1]

https://stackoverflow.com/questions/48825010/add-specific-characters-to-duplicated-strings: https://stackoverflow.com/questions/48825010/add-specific-characters-to-duplicated-strings

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 优雅R 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一个简单的例子
    • 保留唯一值
      • 完全去重
      • 如何保留信息又能看出重复
        • 参考资料
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档