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()
逻辑说明
- 缺失值填充逻辑:按
Year分组后在组内将Trial降序排列,此时数值更大的Trial会排在上方,调用fill()函数从上往下填充,即可实现当前行的NA用序号更大的后一试验同列数值填充,完全匹配你给出的示例A到B的填充规则。 - 断档补全逻辑:将填充完缺失值的数据按
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
相关产品推荐
相关产品推荐

