在R语言中实现基于球队名称参数的数据框自动化处理
解决方法:完善自动化数据处理函数
针对需求,以下是完善后的datacleanup()函数,支持datacleanup(falcons)的调用方式,输出与手动处理完全一致的结果。
核心修改点
- 动态匹配球队数据:通过非标准求值,将输入的球队名称转换为对应数据集名称(如
falcons→falconscap2022/falconspicks2022) - 对齐手动处理逻辑:严格复刻手动代码的数据转换、计算规则
- 明确结果返回:函数最终输出合并后的处理结果
- 保留可选清洗步骤:针对原始带
$和逗号的薪资数据,保留格式清洗逻辑(示例数据已为数值型,可按需启用)
完善后的函数代码
library(dplyr) library(rlang) datacleanup <- function(team){ # 将输入的球队名称转换为字符串,匹配对应数据集 team_name <- as_string(ensym(team)) # 动态获取球队薪资与选秀数据 teamcap2022 <- get(paste0(team_name, "cap2022")) teampicks2022 <- get(paste0(team_name, "picks2022")) # 可选:处理带$和逗号的原始average字段(示例数据已为数值,可注释) # teamcap2022 <- teamcap2022 %>% # mutate(average = gsub(",", "", average) %>% # gsub("\\$", "", .) %>% # as.numeric()) # 复刻手动版本的薪资数据处理逻辑 teamcap2022 <- teamcap2022 |> mutate(cash = sum(average), nump = n(), .by = posg) |> mutate(cap_pct = percent(cash/sum(cash))) # 复刻手动版本的选秀数据处理逻辑 teampicks2022 <- teampicks2022 |> mutate(top100 = as.numeric(pick) <= 100, .keep = "unused") # 合并数据集 team2022stuff <- teamcap2022 %>% left_join(teampicks2022, by = "posg") # 返回处理结果 return(team2022stuff) }
测试验证
使用提供的示例数据,调用函数即可得到与手动处理一致的结果:
# 加载示例数据 falconscap2022 <- structure(list(average = c(18333333, 16823333, 9375000, 8227624, 5500000, 5383617, 5250000, 4850000, 3681822, 3576437), posg = c("OL", "Front7", "QB", "TE", "DB", "WR", "RB", "ST", "OL", "DB")), row.names = c(NA, -10L), class = "data.frame") falconspicks2022 <- structure(list(pick = c("10", "109", "200", "94", "109"), posg = c("OL", "Front7", "DB", "WR", "DB")), row.names = c(NA, -5L), class = "data.frame") # 调用函数 result <- datacleanup(falcons) # 查看结果 print(result)
细节说明
- 如果习惯传入字符串参数,可将
team_name <- as_string(ensym(team))改为team_name <- team,调用时用datacleanup("falcons") - 注释的薪资清洗代码,可在原始数据包含
$或逗号时启用,示例数据无需执行该步骤
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

