如何基于其他列条件创建非二进制的多级别新列
为联赛分配多等级难度值的实现方法
你不需要局限于ifelse的二进制结果,下面是几种在R中实现多等级联赛难度赋值的方案,覆盖你要求的0.4-1区间,针对指定联赛设置对应等级:
方法1:嵌套ifelse语句
虽然ifelse本身是二进制判断,但可以通过嵌套实现多分支逻辑,直接给不同联赛赋值对应难度:
# 假设你的数据框名为df df$league_difficulty <- ifelse(df$League == "La Liga", 1.0, ifelse(df$League == "Bundesliga", 0.8, ifelse(df$League == "Serie A", 0.6, ifelse(df$League == "Premier League", 0.7, 0.4))))
说明:这里将La Liga设为最高难度1.0,Bundesliga为0.8,Premier League为0.7,Serie A为0.6,其他未指定联赛统一设为最低0.4,你可根据需求调整数值。
方法2:使用dplyr::case_when(推荐)
dplyr包的case_when语法更清晰,可读性远高于嵌套ifelse,适合多条件分支赋值:
先安装并加载dplyr:
install.packages("dplyr") library(dplyr)
然后执行赋值操作:
df <- df %>% mutate(league_difficulty = case_when( League == "La Liga" ~ 1.0, League == "Bundesliga" ~ 0.8, League == "Premier League" ~ 0.7, League == "Serie A" ~ 0.6, TRUE ~ 0.4 # 所有未匹配的联赛默认赋值0.4 ))
方法3:命名向量映射
如果联赛与难度的对应关系固定,可先创建一个命名向量,再通过匹配快速赋值,便于后续修改等级:
# 创建联赛-难度映射向量 difficulty_map <- c( "La Liga" = 1.0, "Bundesliga" = 0.8, "Premier League" = 0.7, "Serie A" = 0.6 ) # 为数据框添加难度列,未匹配的联赛设为0.4 df$league_difficulty <- ifelse(df$League %in% names(difficulty_map), difficulty_map[df$League], 0.4)
方法4:因子转换为数值
先将指定联赛转换为有序因子,再映射到对应难度数值:
# 将指定联赛设为有序因子,顺序对应难度从高到低 df$League_factor <- factor(df$League, levels = c("La Liga", "Bundesliga", "Premier League", "Serie A"), ordered = TRUE) # 映射到0.4-1的区间数值 df$league_difficulty <- case_when( League_factor == "La Liga" ~ 1.0, League_factor == "Bundesliga" ~ 0.8, League_factor == "Premier League" ~ 0.7, League_factor == "Serie A" ~ 0.6, TRUE ~ 0.4 )
验证结果
执行上述任意方法后,可通过以下代码查看赋值结果:
# 查看不同联赛的难度值分布 table(df$League, df$league_difficulty)
内容的提问来源于stack exchange,提问作者Moisés Feitosa
相关产品推荐
相关产品推荐

