我有以下庞大的数据框:
> dim(cons)
[1] 14279806 5
> head(cons)
Gene.ID Gene.Symbol Transcript.ID miRNA context...score
1 ENSG00000188846.9 RPL14 ENST00000416518.1 hsa-miR-373-3p -0.042
2 ENSG00000188846.9 RPL14 ENST00000416518.1 hsa-miR-520a-3p -0.109
3 ENSG00000188846.9 RPL14 ENST00000416518.1 hsa-miR-520b -0.085
4 ENSG00000188846.9 RPL14 ENST00000416518.1 hsa-miR-520c-3p -0.085
5 ENSG00000188846.9 RPL14 ENST00000416518.1 hsa-miR-520d-3p -0.109
我要做的是在“。”之后删除数字。在Gene.ID和Transcript.ID列中,在两种情况下,我总是在“。”之前有15个字符。。为此,我使用了以下代码:
for (i in 1:nrow(cons)){
cons$Transcript.ID[i]<-substr(cons$Transcript.ID[i],1,15)
cons$Gene.ID[i]<-substr(cons$Gene.ID[i],1,15)
}
这确实很耗时(20分钟后不到总数的1%)。我想问你:有没有一种方法可以避免for循环并尽可能地加快代码的速度?先感谢您。
substr
是向量化的,您可以执行以下操作:
cons$Transcript.ID<-substr(cons$Transcript.ID,1,15)
cons$Gene.ID<-substr(cons$Gene.ID,1,15)
编辑:
我看到您有重复项,如果您的列已经存在,则factors
可以通过执行以下操作来加快速度:
levels(cons$Transcript.ID) <-substr(levels(cons$Transcript.ID),1,15)
levels(cons$Gene.ID) <-substr(levels(cons$Gene.ID),1,15)
如果不是这些因素,则可以先进行转换,但是从下面的@Benjamen的评论看来,由于转换时间的原因,您可能没有整体获得时间。
cons$Transcript.ID <- factor(cons$Transcript.ID)
cons$Gene.ID <- factor(cons$Gene.ID)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句