如何在R中压缩含NA的data frame,消除空缺并合并同日期行?
数据规整解决方案
针对你提供的这种每个日期对应多行、每行仅单个数值列有值的情况,可以用以下两种高效的R方法完成数据合并,同时删除CATEGORY列:
方法1:dplyr分组聚合
利用分组后取最大值(自动忽略NA)的方式提取每组的非NA值——因为每组内每个数值列仅有一个有效数据,取最大值等价于提取该唯一有效值:
library(dplyr) # 假设原始数据框为df cleaned_df <- df %>% select(-CATEGORY) %>% # 移除CATEGORY列 group_by(INVOICE_DATE) %>% summarize( across(everything(), ~ max(.x, na.rm = TRUE)), .groups = "drop" )
方法2:tidyr填充去重
通过双向填充补全NA值,再保留每个日期的唯一行,实现数据合并:
library(tidyr) library(dplyr) cleaned_df <- df %>% select(-CATEGORY) %>% group_by(INVOICE_DATE) %>% fill(everything(), .direction = "downup") %>% # 上下填充补全所有NA distinct(INVOICE_DATE, .keep_all = TRUE) %>% # 保留每个日期的唯一记录 ungroup()
处理后效果
最终表格每行对应一个INVOICE_DATE,Crumble、Tincture、Battery列均为对应日期的有效数值;Other列因无有效数据会保留NA,若不需要可额外添加select(-Other)语句删除。
内容的提问来源于stack exchange,提问作者hachiko
相关产品推荐
相关产品推荐

