如何根据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
相关产品推荐
相关产品推荐

