【发布时间】:2015-05-23 13:20:43
【问题描述】:
我对使用 for 循环交叉引用 2 个数据帧的速度有疑问。总体目标是识别数据框 2 中位于数据框 1 中指定的坐标之间的行(并满足其他标准)。例如df1:
chr start stop strand
1 chr1 179324331 179327814 +
2 chr21 45176033 45182188 +
3 chr5 126887642 126890780 +
4 chr5 148730689 148734146 +
df2:
chr start strand
1 chr1 179326331 +
2 chr21 45175033 +
3 chr5 126886642 +
4 chr5 148729689 +
我目前的代码是:
for (index in 1:nrow(df1)) {
found_miRNAs <- ""
curr_row = df1[index, ];
for (index2 in 1:nrow(df2)){
curr_target = df2[index2, ]
if (curr_row$chrm == curr_target$chrm & curr_row$start < curr_target$start & curr_row$stop > curr_target$start & curr_row$strand == curr_target$strand) {
found_miRNAs <- paste(found_miRNAs, curr_target$start, sep=":")
}
}
curr_row$miRNAs <- found_miRNAs
found_log <- rbind(Mcf7_short_aUTRs2,curr_row)
}
我的实际数据帧对于 df1 是 400 行,对于 df2 是 > 100 000 行,我希望进行 500 次迭代,因此,您可以想象这非常慢。我对 R 比较陌生,所以任何可以提高效率的函数的提示都会很棒。
【问题讨论】:
-
或者下面的答案(有更多的赞成票):)