用列表模糊连接列

fuzzy joining a column with a list

数据如下:

library(fuzzyjoin)
nr <- c(1,2)
col2 <- c("b","a")

dat <- cbind.data.frame(
  nr, col2
)

thelist <- list(
aa=c(1,2,3),
bb=c(1,2,3)
)

我想要以下内容:

stringdist_left_join(dat, thelist, by = "col2", method = "lcs", max_dist = 1)

但这(不出所料)给出了一个错误:

Error in `group_by_prepare()`:
! Must group by variables found in `.data`.
* Column `col` is not found.
Run `rlang::last_error()` to see where the error occurred.

最好的方法是什么?

期望的输出:

nr col2 thelist list_col
1  b    bb      c(1,2,3)
2  a    aa      c(1,2,3)

这有点坑爹。不知道有没有更优雅的方案。

创建转置列表的 data.frame 并将其转换为 data.frame,列表的所有名称都在名为“col2”的列中。然后使用模糊连接合并数据。使用生成的 out data.frame,您可以删除不需要的列。

library(fuzzyjoin)
library(tidyr)

dat <- data.frame(
  nr = c(1,2), col2 = c("b","a")
)

thelist <- list(
  aa=c(1,2,3),
  bb=c(1,2,3,4)
)

# create data.frame with list info 
a <- tibble(col2 = names(thelist), value = thelist)
a
# A tibble: 2 x 2
  col2  value       
  <chr> <named list>
1 aa    <dbl [3]>   
2 bb    <dbl [4]>   

# merge data
out <- stringdist_left_join(dat, a, by = "col2", method = "lcs", max_dist = 1)
out
  nr col2.x col2.y      value
1  1      b     bb 1, 2, 3, 4
2  2      a     aa    1, 2, 3