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

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

作者: 大李_1ba1 | 来源:发表于2021-11-08 20:53 被阅读0次
    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-某列重复项对应的所有行合并(不做删除)

          本文链接:https://www.haomeiwen.com/subject/eqlpzltx.html