用列表模糊连接列
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
数据如下:
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