加快R中的循环以消除数据帧中字符串的一部分

Furla94

我有以下庞大的数据框:

> 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循环并尽可能地加快代码的速度?先感谢您。

Moody_Mudskipper

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

删除数据框列(R)中的一部分字符串

从R中的数据框行中删除字符串的一部分

消除php中url字符串的最后一部分

用python中数据帧中的值替换字符串的一部分

黑名单数组火花数据帧中字符串值的一部分

如何在R中替换数据框中的字符串的一部分?

Python 3用dict中的数据替换字符串的一部分

删除R中整个数据框列上的一部分随机字符串

将字符串的一部分转换为数据帧的不同列

删除数据帧的一部分

检测R中字符串的一部分(不完全匹配)

删除 R 中字符串的一部分

匹配R中字符串的一部分

R Shiny/Shinydashboard:隐藏表格中字符串的最后一部分

R 中的列名 - 替换名称字符串的一部分

C在字符串中获取一部分字符串

在字符串数组中查找字符串的一部分

验证数据帧字符串的哪一部分不能转换为字符串

如何更改变量中存在的路径字符串(作为循环的一部分)?

在R数据框列中提取字符串的一部分

从数据文件的一列中删除点后的字符串的最后一部分

如何从特定字符中删除字符串的一部分?

如何从 Python 中的 Pandas DataFrame 中删除字符串的一部分

提取/删除R中具有随机数字/字符的整数或字符串的一部分

R:检查向量是否是数据帧中任何行的一部分

查找字符串中的模式并连接R中的唯一部分

删除最后一个“”之后的字符串的最后一部分。在R中

如何从数据表中选择列是 C#.net 中字符串的一部分

如何在最后一次出现时删除数组中字符串的一部分