如何在dplyr中使用Hmisc包的approxExtrap函数?
解决Hmisc包approxExtrap线性外推的语法问题
错误原因分析
你的代码存在三个核心问题:
- 参数传递逻辑错误:
approxExtrap需要自变量x(比如这里的day)和待插值的因变量y(比如sales),你把待插值的sales传给了x参数,完全搞反了逻辑。 - 缺少
xout参数:必须指定要在哪些x值上生成插值/外推结果,这里需要覆盖所有day的取值。 - 错误设置
y=NULL:y是必填参数,不能设为NULL,必须传入需要补全的sales列。
正确代码实现
library(tidyverse) library(Hmisc) # 创建数据框 df <- tibble(day=1:10, sales = c(NA, NA, NA, 4, 5, 6, 7, 8 , 9, 10)) # 执行线性外推与插值 df <- df %>% mutate(sales = approxExtrap( x = day[!is.na(sales)], # 取有非NA销售数据的日期作为自变量 y = sales[!is.na(sales)],# 取对应的非NA销售数据作为因变量 xout = day, # 指定要生成结果的所有日期 method = "linear" # 指定线性外推(默认就是linear,可省略) )$y) # 提取结果中的y值(插值后的销售数据) # 查看结果 df
运行结果
执行后df的sales列会被补全为:1, 2, 3, 4, 5, 6, 7, 8, 9, 10,前3个NA值通过线性外推得到了连续合理的数值。
补充说明
approxExtrap会自动匹配xout与已知x的对应关系,不会覆盖原数据中的非NA有效值。- 若使用基础包的
approx函数做单纯插值,逻辑类似,但approxExtrap支持超出已知x范围的外推,这是两者的核心区别。
内容的提问来源于stack exchange,提问作者dd_data
相关产品推荐
相关产品推荐

