美文网首页生物信息学从零开始学数据科学与R语言生物信息学与算法
数据框某一列含多种重复值时,分别重命名的两种方法

数据框某一列含多种重复值时,分别重命名的两种方法

作者: 美式永不加糖 | 来源:发表于2019-08-22 01:17 被阅读7次

处理各种各样的数据总会遇到各种各样的状况,比如:

含相同序列名称的fasta文件用于比对是会报错的,要解决就需要给序列重命名,于是自然而然想到给它们加个12345…

方法1

Jimmy大神的方法:

tmp=do.call(rbind,lapply(split(allppseqs,allppseqs$hgnc_symbol),function(x){
  x$id=1:nrow(x)
  return(x)
}))

然后需要把第2列第3列合并:

method1_out <- tidyr::unite(tmp,"hgnc_symbol",hgnc_symbol,id)

unite 在合并同一数据框中的两列时会自动给数据加上"_"

方法二

就由我来用循环解决它,先生成一个判断重复与否的索引:

index <- duplicated(allppseqs$hgnc_symbol)
head(index)
# [1] FALSE  TRUE FALSE  TRUE  TRUE  TRUE
method2_out <- allppseqs
i <- 1
for(j in 1:nrow(method2_out)){
if(index[j]==FALSE){
  i = 1
  method2_out[j,2] <- paste0(method2_out[j,2], ".",i)
  }
  else {
    i = i+1
    method2_out[j,2] <- paste0(method2_out[j,2], ".",i)
  } 
}

这里需要先创建索引而不直接用 duplicated(allppseqsback2$hgnc_symbol)[j]==FALSE 作为条件,原因是在给某行加上数字 i 后,下一行自然就不再是前一行的重复,会导致每行的duplicated判断值都为 FALSE , 循环运行后 i 永远等于1,给每行加上的数字也一直是1。


最后,向大家隆重推荐生信技能树的一系列干货!

  1. 生信技能树全球公益巡讲:https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g
  2. B站公益74小时生信工程师教学视频合辑:https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw
  3. 招学徒:https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw

相关文章

网友评论

    本文标题:数据框某一列含多种重复值时,分别重命名的两种方法

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