在R中根据条件直接修改DataFrame多列变量值的方法求助
解决方案
基础R方法(无需额外包)
你的ifelse仅返回计算后的向量,但未对原DataFrame的列进行赋值。要实现需求,需分别针对两个列的目标子集修改:
- 给
snitchCatcher取值为"home"的行的homeGoals加5:
Df$homeGoals[Df$snitchCatcher == "home"] <- Df$homeGoals[Df$snitchCatcher == "home"] + 5
- 给
snitchCatcher不为"home"的行的awayGoals加5:
Df$awayGoals[Df$snitchCatcher != "home"] <- Df$awayGoals[Df$snitchCatcher != "home"] + 5
原代码失效原因
你的ifelse返回的是单一向量——要么是homeGoals+5,要么是awayGoals+5,但需求是同时修改两个不同的列,因此无法用一个ifelse直接覆盖某一列,必须针对每个列的目标子集单独赋值。
可选:tidyverse/dplyr方法(逻辑更直观)
若愿意使用dplyr包,代码可读性更强,适合新手:
# 未安装包的话先运行:install.packages("dplyr") library(dplyr) # 修改原DataFrame(也可赋值给新变量) Df <- Df %>% mutate( homeGoals = ifelse(snitchCatcher == "home", homeGoals + 5, homeGoals), awayGoals = ifelse(snitchCatcher != "home", awayGoals + 5, awayGoals) )
测试验证
用示例数据验证效果:
# 构造测试数据 Df <- data.frame( snitchCatcher = c("home", "away", "home", "neutral"), homeGoals = c(2, 3, 1, 0), awayGoals = c(1, 2, 0, 5) ) # 运行代码后预期结果: # snitchCatcher homeGoals awayGoals # 1 home 7 1 # 2 away 3 7 # 3 home 6 0 # 4 neutral 0 10
内容的提问来源于stack exchange,提问作者Quang Trương
相关产品推荐
相关产品推荐

