我有一个数据集,每分钟体温持续8小时。我删除了异常数据,现在有NA值,有时只有一个,有时甚至超过10个。 我想用线性插值替换丢失的数据。
我尝试过不同的东西,但是我不能让'大约'工作(NA值保持NA ...)或甚至找到一种方法来指定R使用之前的值(相同的列,减1行)或(同一列,+ 1行)之后的值。 在这个例子中,我尝试只替换一个NA,[+ 1]和[-1]只读为[1],所以它不起作用
df$var1_lini <- ifelse (!is.na(df$var1),df$var1,
ifelse (!is.na(df$var[+1]),df$var[-1]+(df$var1[-1]+df$var1[+1])/2,NA))
我愿意接受任何形式的解决方案 我是初学者,所以详细的答案会很棒! 谢谢
夜
答案 0 :(得分:2)
另一种方法是使用您拥有的现有数据构建线性模型,然后使用该模型(模型预测)来替换NA。
一个帮助您理解的简单示例是:
library(ggplot2)
# create example dataset
df = data.frame(value = mtcars$qsec,
time = 1:nrow(mtcars))
# replace some values with NA (you can experiment with different values)
df$value[c(5,12,17,18,30)] = NA
# build linear model based on existing data (model ignores rows with NAs)
m = lm(value ~ time, data = df)
# add predictions as a column
df$pred_value = predict(m, newdata = df)
# replace (only) NAs with predictions
df$interp_value = ifelse(is.na(df$value), df$pred_value, df$value)
# plot existing and interpolated data
ggplot()+
geom_point(data=df, aes(time, value), size=5)+
geom_point(data=df, aes(time, interp_value), col="red")
其中黑点代表现有值,红点代表现有的+ NA替换。
答案 1 :(得分:0)
解决此问题的最简单方法是使用具有丢失数据替换功能的软件包,例如 .env
或imputeTS
,forecast
用合理的估计值替换缺失值的过程在统计中也称为“投入”。
要插值时间序列,向量或data.frame,就这么简单:
zoo
请记住,除了线性插值法以外,还有其他插补方法。 例如。移动平均插补,基于季节性的插补-根据问题,另一种方法将提供更好的结果。 (以下是一些进一步的说明:Time Series Imputation)