如何用dplyr基于列条件与外部向量生成list列?
解决方案:用dplyr + purrr 实现列表列生成
你可以用dplyr结合purrr的map2函数,或者rowwise()分组处理,两种方式都能替代循环,高效生成目标列表列:
方法1:使用purrr::map2
library(dplyr) library(purrr) dat <- tibble(A = c(12, 27, 22, 1, 15, 30, 20, 28, 19), B = c(68, 46, 69, 7, 44, 76, 72, 50, 51)) vec <- c(12, 25, 28, 58, 98) # 生成列表列y dat <- dat %>% mutate(y = map2(A, B, ~ vec[vec >= .x & vec <= .y]))
方法2:使用rowwise()
dat <- dat %>% rowwise() %>% mutate(y = list(vec[vec >= A & vec <= B])) %>% ungroup()
结果验证
生成的y列完全符合预期:
- 第1行:
[12, 25, 28, 58] - 第2行:
[28] - 第3行:
[25, 28, 58] - 第4行:
[](空列表)
说明
map2(A, B, ...)会逐行取出A和B的对应值(.x对应A,.y对应B),筛选vec中满足区间条件的元素后返回列表,自动适配为tibble的列表列。rowwise()会让mutate按行单独处理,用list()包裹筛选结果确保生成列表类型列,处理完记得用ungroup()取消行分组,避免后续操作受分组影响。
内容的提问来源于stack exchange,提问作者Domenico Spidy Tamburro
相关产品推荐
相关产品推荐

