【问题标题】:fuzzy join with stringdist_join() in R, Error: NAs are not allowed in subscripted assignments在 R 中使用 stringdist_join() 进行模糊连接,错误:下标分配中不允许使用 NA
【发布时间】:2019-04-06 03:43:15
【问题描述】:

首先很抱歉,如果我的格式不好,这是我第一次发帖,(也是编程和 R 的新手)

我正在尝试在字符串变量上将两个数据框合并在一起。我正在合并可能无法完美匹配的大学名称,因此我希望使用模糊或近似字符串匹配函数进行合并。当我找到“fuzzyjoin”包时,我很高兴。

来自 cranR: stringdist_join:根据列的模糊字符串匹配连接两个表

stringdist_join(x, y, by = NULL, max_dist = 2, method = c("osa", "lv",
  "dl", "hamming", "lcs", "qgram", "cosine", "jaccard", "jw","soundex"), mode = "inner", ignore_case = FALSE, distance_col = NULL, ...)

我的代码:

stringdist_left_join(new, institutions, by = c("tm_9_undergradu" = "Institution.Name"))

错误:

Error in dists[include] <- stringdist::stringdist(v1[include], v2[include],  : 
NAs are not allowed in subscripted assignments

我知道这些列中有一些 NA,但我不确定如何删除它们,因为我也需要它们。我知道 NA 的其他加入和合并功能将被忽略。有谁知道解决此包的此错误或以另一种方式对字符串进行近似连接的方法。谢谢您的帮助。

【问题讨论】:

  • 如果您包含数据或其中的一些数据以及您期望的输出结果,那么人们会更容易尝试回答。您可以使用dput 命令获取创建数据框的代码。例如dput(new)dput(institutions)。在没有看到数据的情况下,我的建议是将数据限制在连接变量不是 NA 的情况下。
  • 感谢您的帮助 Kerry,我能够删除该列中带有 NA 的行,然后重新加入它们。我希望有一种方法可以在函数中执行此操作,但感谢您的帮助。
  • @Brian 你有没有找到更好的解决方案?这是我的确切问题,但我要加入多个专栏。我不断收到此错误。
  • @epi_n00b 我最终不得不事先删除带有 NA 的行,然后在加入后将它们重新绑定。我找不到任何方法让函数忽略它们。

标签: r dplyr merge fuzzy-comparison fuzzyjoin


【解决方案1】:

这个答案对我有用,来自GitHub

第 1 步:找出哪个 Df 有 NAs

`which(is.na(df1))
 which(is.na(df2))`

第 2 步:将 NAs 替换为其他内容。 df1[is.na(df1)] &lt;- "empty_string"

第 3 步:运行连接(出现错误时我正在使用的代码)

`test1 <- msa_table %>%
   as_tibble() %>% 
   unlist() %>%
   mutate(msa = sub("\\(.*)","", as.character(msa)) %>% 
   stringdist_full_join(msa_table, df1, by = 'msa', max_dist = 2)` 

我的结果没有出现同样的错误,但我的表中仍然有 NAs

希望这会有所帮助!另外,要明确一点:这个解决方案来自 GitHub 上的 Anton Prokopyev '@prokopyev'。

【讨论】:

    【解决方案2】:

    试试

    `test1 <- msa_table %>%
        as_tibble() %>% 
        unlist() %>%
        mutate(msa = stringr::str_squish(msa)) %>% 
        stringdist_full_join(msa_table, df1, by = 'msa', max_dist = 2)` 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多