有时会遇到类似上图的情况,进行了一系列的筛选后,一条肽段对应着不同基因名,如下:
此时希望可以以肽段为固定列,将重复列的基因名合并在一起:
整理后
实现上述需求的代码如下:
首先,是一个对数据重复情况的概览,这一块可选做(但是对于不熟悉的数据建议还是看一下)
#首先计算肽段重复了多少次,
#导入原始表格: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")
网友评论