You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:55:18