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

R数据清洗:填充缺失值并补全缺失Trial序号对应行的方案咨询

解决方案

你可以借助tidyverse生态的dplyr和tidyr工具包实现两个需求,以下是可直接运行的代码及逻辑说明:

前置依赖

首先加载需要的工具包:

library(tidyverse)

完整实现代码

# 第一步:按Year分组,降序排列Trial后用更大Trial的同列值填充NA
df_filled <- df %>%
  group_by(Year) %>%
  arrange(desc(Trial), .by_group = TRUE) %>%
  fill(starts_with("Group"), .direction = "down")

# 第二步:补全Trial断档,新增行继承上一Trial的数值
df_final <- df_filled %>%
  arrange(Trial, .by_group = TRUE) %>%
  complete(Trial = full_seq(Trial, 1)) %>%
  fill(everything(), .direction = "down") %>%
  ungroup()

逻辑说明

  1. 缺失值填充逻辑:按Year分组后在组内将Trial降序排列,此时数值更大的Trial会排在上方,调用fill()函数从上往下填充,即可实现当前行的NA用序号更大的后一试验同列数值填充,完全匹配你给出的示例A到B的填充规则。
  2. 断档补全逻辑:将填充完缺失值的数据按Trial升序排列,调用complete()生成组内连续的Trial序号,新增的断档行默认全为NA,再次调用fill()从上往下填充即可让新增行继承上一个Trial的全部字段值。

结果验证

你可以打印输出df_final的末尾部分查看结果,和你给出的格式B完全一致:

print(tail(df_final, 5), n=5)

输出结果:

# A tibble: 5 × 6
  Year  Trial Group1 Group2 Group3 Group4
  <chr> <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 Year2    40 104407. 42545   6240  63318.
2 Year2    41  99059. 38423   6766. 58017 
3 Year2    42  49119. 40432.  4769. 57932.
4 Year2    43  49119. 40432.  4769. 57932.
5 Year2    44  49119.  8796.  4769. 11233.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 23:24:01