R 计算大数据的成对字符串距离

R 计算大数据的成对字符串距离,r,string-comparison,stringdist,bigdata,R,String Comparison,Stringdist,Bigdata,我正在比较17列上800万个观测值的成对字符串距离 因为我遇到了内存问题,所以我想寻求有关子设置技术或其他方法的帮助,以克服此问题 在这个网站上的一个问题中,我请求帮助加速我编写的原始代码(基于这个问题)。最终的答案(谢谢@alistaire)提供了非常有用的帮助,极大地提高了速度。然而,在实际数据上,我使用这种方法很快就耗尽了内存 考虑以下测试数据,仅需比较三个变量: df <- data.frame(names=c("A ADAM", "S BEAN", "A APPLE", "J B

我正在比较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")) 
但是当我运行原始数据时,这种方法会导致内存问题。然而,我想使用这种方法,因为它真的很快

是否有任何技术/方法可以将此代码应用于800万data.frame的子集,以便将每一行与data.frame中的每一行进行比较

我正在使用的系统有:

  • 12芯

  • 128GB内存


您可能会使用FF软件包,该软件包将大型对象保存在磁盘上,并具有基于磁盘的应用循环。FF软件包不是仅用于读取(和存储)大于RAM的数据吗?我试图处理数据时内存不足。根据文档,您可以将结果直接存储到磁盘。@jwijffels这是真的吗?
ff
包在这里有帮助吗?您可能会使用ff包,它将大型对象保存在磁盘上,并具有基于磁盘的应用循环。ff包不是仅用于读取(和存储)大于RAM的数据吗?我试图处理数据时内存不足。根据文档,您可以将结果直接存储到磁盘。@jwijffels这是真的吗?
ff
软件包在这里有帮助吗?
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