R中如何对数值型数据框每行应用imputeTS包的na_ma函数插补缺失值
问题原因
你原有代码的问题在于:
rowwise操作后未将行内的多列数据整合为单个向量传入na_ma- 缺少对应的列赋值/转换逻辑,函数输出结果无法映射回原数据框结构
na_ma默认针对列向的时间序列做插补,要实现按行插补可以用以下两种方案:
方案1:Base R 实现(写法更简洁)
library(imputeTS) # 按行应用na_ma,处理后转置回原数据框结构 data_imputed <- as.data.frame(t(apply(data, 1, function(x) { na_ma(x, k = 1, weighting = "simple") })))
方案2:dplyr 风格实现(匹配你原有的管道写法习惯)
library(dplyr) library(imputeTS) library(tidyr) data_imputed <- data %>% rowwise() %>% # 将当前行的所有列整合成向量传入na_ma summarise(imputed = list(na_ma(c_across(everything()), k = 1, weighting = "simple"))) %>% # 将插补后的列表拆分为独立列 unnest_wider(imputed, names_sep = "_") %>% # 还原原数据的列名 setNames(names(data))
两种方案运行后得到的结果与你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者RMN
相关产品推荐
相关产品推荐

