如何在R语言中按组用邻近均值填充NA值
按组用邻近均值填充NA值的解决方案
问题原因
你之前的代码报错是因为在mutate中调用na_ma(stock$Price, ...)时,传入的是整个原始数据集的Price列,而group_by分组后每个组的行数远小于整个数据集的行数,导致返回结果的长度和当前组的行数不匹配,触发报错。
正确实现代码
使用dplyr分组后,直接传入组内的Price列(而非整个数据集的列)即可解决问题,结合imputeTS包的na_ma函数实现按组插补:
# 加载所需包 library(dplyr) library(imputeTS) # 构造示例数据集 stock <- tibble( Key = 1:8, Company_Name = c(rep("A", 5), rep("B", 3)), Price = c(12, 13, 12, NA, NA, 20, 21, NA) ) # 按公司分组,用邻近均值插补NA stock_filled <- stock %>% group_by(Company_Name) %>% # 直接使用组内的Price列,而非stock$Price mutate(Price = na_ma(Price, k = 2, weighting = "simple", fill = "extend")) %>% ungroup() # 查看结果 print(stock_filled)
结果验证
运行后得到的结果与预期一致:
# A tibble: 8 × 3 Key Company_Name Price <int> <chr> <dbl> 1 1 A 12 2 2 A 13 3 3 A 12 4 4 A 12.3 5 5 A 12.3 6 6 B 20 7 7 B 21 8 8 B 20.5
参数说明
k = 2:指定取前后各2个邻近值(最多4个)计算均值;weighting = "simple":使用简单算术均值;fill = "extend":当邻近值不足4个时(比如组内开头/结尾的NA),用现有可用的邻近值计算均值。
内容的提问来源于stack exchange,提问作者Shun Liu
相关产品推荐
相关产品推荐

