根据某一列中的重复值,删除相应行,最常出现在多组学数据的处理当中。在处理转录组数据时,通常多个芯片对应一个基因,那么注释之后就会遇到一个棘手的问题:
gene name中有重复,无法将gene name转变为行名
这里总结了常见的处理方式,供大家选择:
1 直接去重复
2 取最大值后去重
3 取平均值后去重
library(dplyr)
df<- data.frame(id = c(1, 2, 2, 3, 3,3,4, 5, 5),
gender = c(3,4,5,NA,3,2,4,2,3),
variant = c(1,5,2,6,3,7,2,NA,2))
##方法一
t1 <- df %>% distinct(id, .keep_all = TRUE)
##方法二
t2 <- df %>% group_by(id) %>% summarise_all(max)
##方法三
library(limma)
t3 <- avereps(df,df$id) %>% as.data.frame()
原始队列
方法一 直接去重
可以看到,直接去重使用了dplyr包中的distinct函数,函数保留了重复的首行,后面的重复行直接删除
image.png
方法二 取最大值后去重
这里使用的还是dplyr包中的函数,group_by和summarise_all,取重复行里面的最大值后,去掉后续的重复行。但是,当重复值中有缺失值的时候,保留的时缺失值NA而不是最大值
方法三 取平均值后去重
这里使用的是limma包里面的avereps函数,这里就不存在缺失值了,但是limma文档里提示,avereps函数只能用log2之后的标准数据
最后
如何选择,我觉着吧,需要看数据的形式,当然,还有很多其他的方式可以筛选,小伙伴们可以分享自己的处理方式,一起探讨哦
网友评论