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

如何用dplyr将DataFrame中的性别值移至新列并去重?

用dplyr处理拆分的DataFrame数据

首先构造你的示例数据方便测试:

library(dplyr)

df <- tibble(
  name = c("Jon", "male", "sam", "male", "male"),
  age = c(20, NA, 21, NA, NA)
)

接下来用以下代码处理,实现将性别移至新列、移除冗余行并去重重复性别:

df_cleaned <- df %>%
  # 为每个有效姓名-年龄行创建分组ID
  mutate(group_id = cumsum(!is.na(age))) %>%
  group_by(group_id) %>%
  summarise(
    name = first(name[!is.na(age)]), # 提取分组内的姓名
    age = first(age[!is.na(age)]),   # 提取分组内的年龄
    # 提取分组内的性别值,仅保留第一个出现的
    gender = first(name[name %in% c("male", "female")])
  ) %>%
  ungroup() %>%
  select(-group_id) # 移除临时分组列

代码说明:

  • cumsum(!is.na(age)):通过累加非空年龄行的标识,把每个姓名行和其下方的性别行归为同一组,解决信息拆分在两行的问题。
  • 分组聚合时,通过first()提取有效姓名、年龄,同时筛选出性别值并只保留第一个,自动处理多个重复性别值的情况。
  • 最后移除临时的分组ID列,得到结构规整的结果。

处理后的结果:

nameagegender
Jon20male
sam21male

内容的提问来源于stack exchange,提问作者Abdullah Al Sobhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:17:14