如何上移数据消除NA值,合并相同UPC、门店、周次的冗余数据?
解决方案
你已经完成了数据的长宽转换,只需要在现有代码的基础上增加分组填充、去重逻辑即可解决同组NA和冗余问题,最终也可以直接输出你需要的字段结构:
你可以在你现有代码末尾补充以下代码:
library(tidyverse) # 你的原有代码保持不变 RD <- read.csv("Raw Soft Drinks Sales Data.csv") U <- read.csv("UPC Soft Drinks.csv") %>% mutate(UPC = as.factor(UPC), BRAND = as.factor(BRAND), CLASS = as.factor(CLASS)) RDX <- RD %>% filter(UPC != "Total") %>% select (-c(Total.Q1,Total.Q2,Total.Q3,Total.Q4)) RDXL <- RDX %>% pivot_longer( cols = starts_with("Week"), names_to = "WEEK", names_prefix = "Week", values_to = "UNITS", values_drop_na = TRUE) RDW <- pivot_wider(RDXL, names_from = "ITEM", values_from = "UNITS")%>% select(-TOTAL) # 新增处理NA与冗余的代码 RDW_final <- RDW %>% # 按你确认的唯一键分组:门店、UPC、周度三个字段完全一致的行归为一组 group_by(STORE, UPC, WEEK) %>% # 同组内所有字段的NA会被上下存在的非NA值补全 fill(everything(), .direction = "downup") %>% # 去除分组后重复的冗余行,每组仅保留1行完整数据 distinct() %>% ungroup() %>% # 调整列顺序和命名,完全匹配你需要的字段 select(Store = STORE, UPC, Dollars, Units, Feat, Deal, Week = WEEK)
逻辑说明
- 因为你确认相同
Store、UPC、Week的行信息是互补的,所以按这三个字段分组后,fill()函数会自动把同组内的NA值替换为同组存在的非NA值 distinct()直接去掉重复的冗余行,得到每行都是唯一完整的数据集- 最后用
select()直接调整为你需要的列名和顺序,不需要额外再做转换
内容的提问来源于stack exchange,提问作者Christina Germana
相关产品推荐
相关产品推荐

