gpt4 book ai didi

r - 加速 R 中的循环以消除数据帧中的部分字符串

转载 作者:行者123 更新时间:2023-12-03 02:14:15 25 4
gpt4 key购买 nike

我有以下巨大的数据框:

> 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)

编辑:

我发现您有重复项,如果您的列已经是因素,您可以通过执行以下操作来加快速度:

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)

关于r - 加速 R 中的循环以消除数据帧中的部分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46195831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com