我有一个很大的值表(600万行),我认为需要重新格式化才能将其用于与我的数据集进行比较。该表有3列我在乎。
第一列包含核苷酸碱基的变化,形式为C> G,A> C,A> G等。我想将其分为两个单独的列。
第二列具有染色体和碱基位置,格式为10:130448、2:40483、5:30821291,等等。我也想将其分为两列。
第三列具有许多样本群体中的等位基因分数,格式为.02 / .03 / .20。我想将第三部分提取到新列中。

问题是我编写的代码目前非常慢。看起来大概需要一天半的时间才能运行。我在这里想念什么吗?任何建议,将不胜感激。

我当前的代码执行以下操作:pos,change和fraction分别接收上述值的向量,使用strsplit拆分。然后,我遍历整个数据库,从这三个向量中获取ith值,并使用所需的值创建新列。

数据库格式化后,我应该能够轻松地按染色体编号,碱基,参考等位基因,替代等位基因等检查大量样本。

pos <- strsplit(total.esp$NCBI.Base, ":")
change <- strsplit(total.esp$Alleles, ">")
fraction <- strsplit(total.esp$'MAFinPercent(EA/AA/All)', "/")
for (i in 1:length(pos)){
    current <- pos[[i]]
    mutation <- change[[i]]
    af <- fraction[[i]]
    total.esp$chrom[i] <- current[1]
    total.esp$base[i] <- current [2]
    total.esp$ref[i] <- mutation[1]
    total.esp$alt[i] <- mutation[2]
    total.esp$af[i] <- af[3]

}


谢谢!

最佳答案

尝试执行此操作(保留前三行代码后):

 total.esp   <- data.frame( chrom =sapply( pos, "[", 1),
                            base = sapply( pos, "[", 2),
                            ref  = sapply( change, "[", 1),
                            alt = sapply(change, "[", 2),
                            af  = sapply( af,  "[", 3)
                           )


我无法想象这需要花费几分钟的时间。 (我确实使用类似大小的R对象。)

关于r - 在R中的大数据集中有效地重新格式化列条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32848288/

10-12 02:50