小技巧6-某列重复项对应的所有行合并(不做删除)

proteinlist.xlsx(protein序列和genename为虚构)

有时会遇到类似上图的情况,进行了一系列的筛选后,一条肽段对应着不同基因名,如下:

高亮行是protein重复行

此时希望可以以肽段为固定列,将重复列的基因名合并在一起
整理后

实现上述需求的代码如下:

首先,是一个对数据重复情况的概览,这一块可选做(但是对于不熟悉的数据建议还是看一下)
#首先计算肽段重复了多少次,
#导入原始表格:proteinlist.xlsx
library(readxl)
list <- read_excel("proteinlist.xlsx")
list2 <- unique(list)#这里是去除完全重复的行,根据需求选做,但是数据量大的时候最好还是过一下
dup <- data.frame(table(list2$Peptide)) #总结重复次数
dup2 <- subset(dup,dup$Freq>1) #筛选出dup中重复次数>1的
head(dup2)#查看重复次数,这一步是为了检验,如果出现异常大的重复数,需要返回检查是不是与数据情况相符
write.csv(list2,"unique_proteinlist.csv")#保存去重后的数据下一步使用,如果数据不需去重,下一步直接使用原表格
然后,需要先将内容拷贝进txt文档,因为下一步需要读取txt文档:注意,不需要拷贝列名
先将内容拷贝进txt文档
准备好txt文件后,进行合并:
library(dplyr)
data <- readLines("protein list.txt")
head(data)#查看一下数据
#[1] "AABBCCDDEE\tG22" "AACCFF\tG44"     "BBCCVVFF\tN33"   "BBCCVVFF\tN32"  
#[5] "AABBCCDDEE\tT34" "DDFFRRJJ\tRMG"  
#注意这里的分隔符是“\t”

peptide <- c()
GN<- c()
for(i in 1:length(data)){
  temp <- unlist(strsplit(data[i], "\t"))
  peptide[i] <- temp[1]
  GN[i] <- paste(temp[-1], collapse = " ")
}
data2 <- data.frame(peptide = peptide, GN= GN)
data_output <- data2 %>% group_by(peptide) %>% summarise(GN= paste(GN, collapse = " "))
#完成~!
write.csv(data_output, "data_output.csv")

“小技巧”系列是我在实际使用中遇到的,又容易忘记的小知识点。记录下来,分享的同时,以备自己查询

你可能感兴趣的:(小技巧6-某列重复项对应的所有行合并(不做删除))