我正在比较 17 列上 800 万个观测值的成对字符串距离。
因为我遇到了内存问题,所以我想寻求有关子设置技术或其他方法的帮助来克服这个问题。
在这个网站上的另一个问题中,我寻求帮助以加快我编写的原始代码(基于另一个问题)。得到的答案(感谢@alistaire)提供了非常有用的帮助并极大地提高了速度。但是,在真实数据上,我使用这种方法很快就会耗尽内存。
考虑以下测试数据,只有三个变量进行比较:
df <- data.frame(names=c("A ADAM", "S BEAN", "A APPLE", "J BOND", "J BOND"),
v1=c("Test_a", "Test_b", "Test_a", "Test_b", "Test_b"),
v2=c("Test_c", "Test_c", "Test_d", "Test_d", "Test_d"))
当我运行以下代码时,我得到了所需的输出并且速度非常快。
map2(df, c('soundex', 'jw', 'jw'), ~stringdist::stringdistmatrix(.x, method = .y)) %>%
map_df(broom::tidy, .id = 'var') %>% spread(var, distance)
# item1 item2 names v1 v2
# 1 2 1 1 0.1111111 0.0000000
# 2 3 1 1 0.0000000 0.1111111
# 3 3 2 1 0.1111111 0.1111111
# 4 4 1 1 0.1111111 0.1111111
# 5 4 2 1 0.0000000 0.1111111
# 6 4 3 1 0.1111111 0.0000000
# 7 5 1 1 0.1111111 0.1111111
# 8 5 2 1 0.0000000 0.1111111
# 9 5 3 1 0.1111111 0.0000000
# 10 5 4 0 0.0000000 0.0000000
但是当我运行原始数据时,这种方法会导致内存问题。然而,我想使用这种方法,因为它真的很快。
是否有任何可用的技术/方法将此代码应用于 800 万个 data.frame 的子集,以便将每一行与 data.frame 中的每一行进行比较?
我正在使用的系统有:
12核
128GB 内存