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

如何根据SPP列值为数据框列应用不同自定义函数生成TALLA列?

R语言实现按分组列应用对应函数生成新列

你可以通过以下几种简洁的方式实现需求,避免复杂循环:

方法1:使用dplyr包的case_when(推荐,代码可读性高)

先确保已安装并加载dplyr:

install.packages("dplyr")
library(dplyr)

对数据框进行处理(假设你的数据框名为df):

df <- df %>%
  mutate(TALLA = case_when(
    SPP == "anchoveta" ~ ancho(PROMEDIO),
    SPP == "pejerrey" ~ peje(PROMEDIO),
    SPP == "merluza" ~ mer(PROMEDIO),
    TRUE ~ NA_real_  # 处理SPP列不在指定值内的情况,返回NA
  ))

方法2:使用基础R的ifelse嵌套

如果不想加载额外包,用基础R的条件判断即可:

df$TALLA <- ifelse(df$SPP == "anchoveta", ancho(df$PROMEDIO),
                   ifelse(df$SPP == "pejerrey", peje(df$PROMEDIO),
                          ifelse(df$SPP == "merluza", mer(df$PROMEDIO), NA)))

方法3:使用匹配映射的方式

先建立SPP值与对应函数的映射关系,再批量处理:

# 建立映射列表
func_map <- list(
  anchoveta = ancho,
  pejerrey = peje,
  merluza = mer
)

# 按SPP分组并应用对应函数
df$TALLA <- mapply(function(f, x) f(x), 
                   func_map[df$SPP], 
                   df$PROMEDIO)

验证结果

处理后的数据框会新增TALLA列,与你给出的示例输出一致:

Label            Year Month Season SPP_depre       SPP PROMEDIO DESVIACIÓN  TALLA
1 OB-03-2015-002-1 2015     3      1        OB  pejerrey     3.04       0.04 11.090
2 OB-03-2015-002-2 2015     3      1        OB anchoveta     2.48       0.03  9.056
3 OB-03-2015-003   2015     3      1        OB   merluza     3.40       0.03 60.657
4 OB-03-2015-008-1 2015     3      1        OB anchoveta     2.39       0.02  8.757
5 OB-03-2015-008-2 2015     3      1        OB anchoveta     2.75       0.03  9.956
6 OB-03-2015-008-3 2015     3      1        OB anchoveta     2.43       0.02  8.890

内容的提问来源于stack exchange,提问作者Rafaella Parodi Horny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:01:08