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

如何在R数据框中创建包含多列条目列表的新列?

解决方法

你的错误在于list(fastballs, sliders, curves)是把整个列作为列表的元素,生成了一个包含3个元素的列表,但数据框只有2行,mutate要求新列长度必须匹配行数(2)或为1,因此报错。

下面是几种可行的解决方案:

方案1:按行分组后打包

通过rowwise()让代码按行执行,每行将三个列的数值打包成一个列表:

library(tidyverse)

df <- data.frame(name = c('Bob','AJ'),
                 fastballs = c(20,13),
                 sliders = c(40,13),
                 curves = c(14,0)) %>% 
  rowwise() %>% 
  mutate(list_column = list(c(fastballs, sliders, curves))) %>% 
  ungroup() # 取消行分组,避免影响后续操作

方案2:使用pmap函数

pmap可以对每行的多列值批量应用函数,这里用c把每行的三个值组合成向量:

library(tidyverse)

df <- data.frame(name = c('Bob','AJ'),
                 fastballs = c(20,13),
                 sliders = c(40,13),
                 curves = c(14,0)) %>% 
  mutate(list_column = pmap(list(fastballs, sliders, curves), c))

方案3:批量选择列打包

如果需要处理的列是连续的(比如第2到第4列),可以用c_across批量选择列,不用逐个写列名:

library(tidyverse)

df <- data.frame(name = c('Bob','AJ'),
                 fastballs = c(20,13),
                 sliders = c(40,13),
                 curves = c(14,0)) %>% 
  rowwise() %>% 
  mutate(list_column = list(c_across(fastballs:curves))) %>% 
  ungroup()

执行任意一种方案后,查看df$list_column就能得到预期结果:第一行为c(20,40,14),第二行为c(13,13,0)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:52:12