处理各种各样的数据总会遇到各种各样的状况,比如:
含相同序列名称的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。
最后,向大家隆重推荐生信技能树的一系列干货!
- 生信技能树全球公益巡讲:https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g
- B站公益74小时生信工程师教学视频合辑:https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw
- 招学徒:https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw