You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ifelse()等方法修正R数据集特定行的性别、年龄字段错误

数据集错误修复方案

第一步:修复gender和age字段错位问题

先定位满足gender == "21"且is.na(age)的行,互换两个字段的取值即可:

# base R 实现
# 定位错位行
misplaced_rows <- d$gender == "21" & is.na(d$age)
# 临时存储原age值
temp_age <- d$age[misplaced_rows]
# 给age赋正确的数值
d$age[misplaced_rows] <- as.integer(d$gender[misplaced_rows])
# 给gender赋正确的取值
d$gender[misplaced_rows] <- as.character(temp_age)

如果习惯用dplyr语法,也可以用以下写法:

library(dplyr)
d <- d %>%
  mutate(
    age = ifelse(gender == "21" & is.na(age), as.integer(gender), age),
    gender = ifelse(gender == "21" & is.na(age), as.character(age), gender)
  )

第二步:标准化gender字段取值

方法1:用ifelse()函数实现(符合你的需求)

借助grepl()模糊匹配开头字符,开启不区分大小写适配大小写不同的取值:

d$gender <- ifelse(grepl("^k", d$gender, ignore.case = TRUE), "F",
                   ifelse(grepl("^m", d$gender, ignore.case = TRUE), "M", d$gender))

说明:^k表示匹配以k开头的字符串,ignore.case = TRUE会同时匹配大写K和小写k的情况,原本已经是F/M的合法取值会保留不变。

方法2:用case_when()实现(可读性更高,适配更复杂的规则扩展)

d <- d %>%
  mutate(gender = case_when(
    grepl("^k", gender, ignore.case = TRUE) ~ "F",
    grepl("^m", gender, ignore.case = TRUE) ~ "M",
    .default = gender
  ))

结果验证

运行以下代码确认修复效果:

unique(d$gender)
unique(d$age)

注:你提供的示例数据中age字段统一设为37、无NA值,错位修复逻辑是适配你描述的真实数据场景,测试时可自行调整示例数据的age取值验证逻辑有效性。

内容的提问来源于stack exchange,提问作者12666727b9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:15:03