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

如何在tibble单个单元格存储向量并将多值拆分到不同列

你原始代码不符合预期的核心原因是:rowwise()分组下直接返回长度大于1的向量时,dplyr会自动将行扩展为对应长度,最终得到的是20行的结果而非10行,提取range[[1]]时也会取到全局的第一个值而非每行的第一个分位数。只需要把quantile()的返回值用list()包裹为单行list元素即可修复你的原有逻辑。

可用实现方案

方案1:修正你的原有写法

library(tidyverse)

tibble(category = LETTERS[1:10]) %>% 
  rowwise() %>% 
  # 用list()包裹返回值,避免自动扩行
  mutate(range = list(quantile(rnorm(100), c(0.025, 0.975), names = FALSE)) ) %>% 
  mutate(lo = range[[1]], hi = range[[2]]) %>% 
  ungroup() %>% 
  select(-range)

方案2:用unnest_wider自动拆分(代码更简洁)

不需要手动提取每个位置的值,自动拆分为多列:

tibble(category = LETTERS[1:10]) %>% 
  rowwise() %>% 
  mutate(range = list(quantile(rnorm(100), c(0.025, 0.975), names = FALSE))) %>% 
  unnest_wider(range, names_repair = ~c("category", "lo", "hi")) %>% 
  ungroup()

方案3:purrr向量化实现(性能更优,适合大数据量场景)

避免rowwise()的性能损耗,用map批量处理:

tibble(category = LETTERS[1:10]) %>% 
  mutate(
    range = map(category, ~quantile(rnorm(100), c(0.025, 0.975), names = FALSE))
  ) %>% 
  unnest_wider(range, names_repair = ~c("category", "lo", "hi"))

内容的提问来源于stack exchange,提问作者sharoz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:06:02