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

R语言数据清洗需求:多数据点时统一采用second数据点值

R语言数据清洗:同步second采集点的gender字段到同id所有记录

原始数据集

df <- data.frame(id = c(1,1,1, 2,2,2, 3,3,  4,4, 5),
                 text = c("female","male","male", "female","female","female", "male","female","male", "female", "female"),
                 time = c("first","second","third", "first","second","third", "first","second","second", "third", "first"))

解决方案

方案1:使用dplyr(tidyverse工具链)

library(dplyr)

df_cleaned <- df %>%
  group_by(id) %>%
  mutate(
    # 提取当前id下second采集点的gender值
    second_gender = first(text[time == "second"]),
    # 存在second记录则替换全组text,否则保留原数据
    text = ifelse(!is.na(second_gender), second_gender, text)
  ) %>%
  select(-second_gender) %>%
  ungroup()

# 输出结果
df_cleaned

方案2:Base R实现(无需额外安装包)

# 按id拆分数据集
split_groups <- split(df, df$id)

# 逐个处理每个id的分组
cleaned_groups <- lapply(split_groups, function(group) {
  second_gender <- group$text[group$time == "second"]
  # 若存在second采集记录,替换当前id所有text
  if (length(second_gender) > 0) {
    group$text <- second_gender[1]
  }
  return(group)
})

# 合并分组并重置行号
df_cleaned <- do.call(rbind, cleaned_groups)
rownames(df_cleaned) <- NULL

# 输出结果
df_cleaned

验证结果

两种方法都会得到符合预期的清洗后数据:

id   text   time
1   1   male  first
2   1   male second
3   1   male  third
4   2 female  first
5   2 female second
6   2 female  third
7   3 female  first
8   3 female second
9   4   male second
10  4   male  third
11  5 female  first

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:20:16