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

如何让tidyr::fill函数按分组填充数据行

解决方案:合并同时间戳的多行数据并填充NA

你的核心需求是将同一TIMESTAMP(及对应RECORD)的多行数据合并为一行,填充所有列的NA值,同时忽略最后一列。原代码仅完成了NA填充但未做去重处理,因此无法得到预期的两行结果,以下是两种可行方案:

方案一:直接汇总提取非NA值

利用dplyr的分组汇总功能,对每个分组内的列提取唯一非NA值(同一分组内每个列仅存在一个有效数据):

library(dplyr)

cleaned_data <- my_data[, -ncol(my_data)] %>%
  # 按TIMESTAMP和RECORD分组(二者一一对应,分组逻辑更严谨)
  group_by(TIMESTAMP, RECORD) %>%
  # 对所有列提取第一个非NA值
  summarise(across(everything(), ~ first(na.omit(.))), .groups = "drop")

# 查看处理后的数据
cleaned_data

方案二:填充NA后去重

先通过双向填充补全同一分组内的所有NA值,再保留每个TIMESTAMP的唯一行:

library(dplyr)
library(tidyr)

cleaned_data <- my_data[, -ncol(my_data)] %>%
  group_by(TIMESTAMP) %>%
  # 双向填充(先向下再向上),确保所有NA被补全
  fill(everything(), .direction = "downup") %>%
  # 按TIMESTAMP去重,保留所有列的完整数据
  distinct(TIMESTAMP, .keep_all = TRUE)

# 查看处理后的数据
cleaned_data

结果说明

两种方案处理后都会得到2行数据,其中WndSpd5s_3m_Avg和WndMaxSpd5s_3m_Avg列的NA会被填充为对应分组的有效数值,其余列保持原有一致值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:10:12