如何在data.table中实现列表列与外部向量的逐行匹配
实现方案(仅依赖data.table原生功能)
核心思路是通过by = 1:nrow(my_dt)实现逐行分组运算,直接对每行的col_y元素执行匹配操作,代码如下:
library(data.table) # 直接生成新的列表列 my_dt[, new_col := .(.(external_vec %in% col_y)), by = 1:nrow(my_dt)]
代码说明
by = 1:nrow(my_dt)是data.table中实现逐行处理的常用写法,会将数据框的每一行作为单独分组进行运算- 内层套两层
.()的作用是将匹配得到的逻辑向量包装为列表的单个元素,保证最终new_col是符合要求的列表列
结果验证
运行上述代码后得到的new_col和你提供的purrr实现方案结果完全一致,可通过以下代码验证:
# 加载验证用包(仅做验证用,实际生产不需要) library(purrr) library(dplyr) library(tibble) # 生成purrr方案结果 purrr_res <- my_dt %>% add_column(ext_vec_as_col = list(external_vec)) %>% mutate(new_col = map2(ext_vec_as_col, col_y, ~.x %in% .y)) %>% pull(new_col) # 对比结果 identical(purrr_res, my_dt$new_col) # 返回 [1] TRUE
内容的提问来源于stack exchange,提问作者Emman
相关产品推荐
相关产品推荐

