【发布时间】:2015-12-27 04:31:17
【问题描述】:
我有一个大型(600 万行)值表,我认为需要对其进行重新格式化,然后才能将其用于与我的数据集进行比较。该表有我关心的 3 列。 第一列包含核苷酸碱基变化,形式为 C>G、A>C、A>G 等。我想将它们分成两个单独的列。 第二列有染色体和碱基位置,格式为 10:130448、2:40483、5:30821291 等。我也想把它分成两列。 第三列包含多个样本群体中的等位基因部分,格式为 .02/.03/.20。我想将第三部分提取到一个新列中。
问题是我写的代码目前非常慢。看起来它需要大约一天半的时间才能运行。我在这里缺少什么吗?任何建议,将不胜感激。
我当前的代码执行以下操作:pos、change 和 fraction 分别接收上述值的向量 split 使用 strsplit。然后我遍历整个数据库,从这三个向量中获取第 i 个值,并使用我想要的值创建新列。
数据库格式化后,我应该可以轻松地通过染色体数、碱基、参考等位基因、替代等位基因等检查大量样本。
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]
}
谢谢!
【问题讨论】:
标签: r