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

如何将DataFrame的C列设为apply函数返回列表的名称?

给apply返回的列表添加自定义名称的几种方法

刚好碰到过类似需求,其实不用纠结apply没有USE.NAME参数,咱们可以用几种简单方式实现用C列作为列表名称的效果,给你列几个实用方案:

方法1:手动给列表命名(最直接,无需额外包)

先正常用apply生成结果,再用names()函数把df的C列赋值给列表的名称就行:

df = data.frame(A=c(1,2,3), B=c(9,5,7), C=c("A", "Z", "E"))
# 生成无名称的结果列表
result <- apply(df, 1, function(x){ data.frame(xxx=as.numeric(x[1]) * as.numeric(x[2])) })
# 给列表设置名称
names(result) <- df$C

执行后你再查看result,每个元素就会以C列的"A"、"Z"、"E"作为名称了。

方法2:用tidyverse工具链(适合习惯purrr的用户)

如果你平时用tidyverse,可以用purrr::set_names()来链式处理,代码更简洁:

library(purrr)
df = data.frame(A=c(1,2,3), B=c(9,5,7), C=c("A", "Z", "E"))

result <- df %>% 
  apply(1, function(x){ data.frame(xxx=as.numeric(x[1]) * as.numeric(x[2])) }) %>%
  set_names(df$C)

方法3:换用by()函数(一步到位生成带名称的列表)

如果你的逻辑允许按C列分组处理,by()函数会自动用分组变量作为列表名称,省去额外命名步骤:

df = data.frame(A=c(1,2,3), B=c(9,5,7), C=c("A", "Z", "E"))
result <- by(df, df$C, function(x){ data.frame(xxx = x$A * x$B) })

注意:这个方法要求C列的每个值都是唯一的,否则相同名称的行会被合并处理,刚好你的示例数据符合这个条件。

不管用哪种方法,最终得到的result都会是你想要的带名称的列表,比如:

> result
$A
  xxx
1   9

$Z
   xxx
1  10

$E
  xxx
1  21

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:59:23