优化匹配两个数据框行的R代码以提升运行速度
优化R代码:快速匹配两个数据框的行
你的代码用了双重循环,时间复杂度是O(n*m)——17000行的data乘800000行的stuff,要执行超过130亿次循环,这显然不可能在合理时间内完成。用R内置的merge()函数可以彻底解决这个效率问题,这是专门为数据框匹配设计的优化工具。
替代方案代码
# 根据指定列匹配,保留data所有行,匹配stuff对应的行 plays <- merge( x = data, y = stuff, by.x = c(2, 5), # data中用来匹配的列:第2列和第5列 by.y = c(2, 4), # stuff中对应的匹配列:第2列和第4列 all.x = TRUE # 保留data的所有行,即使没有匹配到stuff的内容 )
关键说明
merge()函数底层用了高效的哈希匹配或排序合并算法,时间复杂度远低于双重循环,能在几秒到几分钟内完成你的需求。- 如果你的数据中每个
data条目对应唯一的stuff行,结果和你原来的循环逻辑一致;如果有多个匹配行,merge()会把所有匹配结果都保留下来,你可以根据需求用dplyr::distinct()之类的工具去重。 - 建议给数据框的列命名,这样代码可读性更高,比如把
by.x = c("col_name1", "col_name5")替换索引,后续维护更方便。
内容的提问来源于stack exchange,提问作者Kyle Bush
相关产品推荐
相关产品推荐

