R语言如何批量对多组配对列应用自定义双参数函数生成新变量
方法1:使用tidyverse生态的purrr包实现(代码最简洁,推荐)
无需手动逐行写赋值逻辑,自动匹配对应分组的身高体重列:
# 未安装包先运行:install.packages("purrr") library(purrr) # 定义全量分组标识和缩写分组标识,匹配要求的新变量名规则 full_groups <- c("male1", "male2", "female1", "female2") short_groups <- c("m1", "m2", "f1", "f2") # 批量计算后直接合并到原数据框 df[, paste0("bmi", short_groups)] <- map2_dfc( .x = df[, paste0("ht", full_groups)], .y = df[, paste0("wt", full_groups)], .f = myfunc )
方法2:基础R的for循环实现(无需安装额外依赖包)
full_groups <- c("male1", "male2", "female1", "female2") short_groups <- c("m1", "m2", "f1", "f2") for (i in seq_along(full_groups)) { ht_col <- paste0("ht", full_groups[i]) wt_col <- paste0("wt", full_groups[i]) df[[paste0("bmi", short_groups[i])]] <- myfunc(df[[ht_col]], df[[wt_col]]) }
方法3:基础R的mapply实现(无需安装额外依赖包)
full_groups <- c("male1", "male2", "female1", "female2") short_groups <- c("m1", "m2", "f1", "f2") ht_cols <- paste0("ht", full_groups) wt_cols <- paste0("wt", full_groups) df[, paste0("bmi", short_groups)] <- mapply( FUN = myfunc, height = df[ht_cols], weight = df[wt_cols] )
小优化提示
你定义的myfunc可以简化写法,R函数默认返回最后一行表达式的执行结果,无需额外赋值中间变量:
myfunc <- function(height, weight) { height / weight^2 }
内容的提问来源于stack exchange,提问作者kna123
相关产品推荐
相关产品推荐

