【发布时间】:2023-02-06 10:00:52
【问题描述】:
我有一个每小时净动物运动的数据集,但有几次观察员定期缺席。我希望用缺失数据点前后 24 小时的同一时间段的平均值替换缺失的数据点(在新列中)。
示例数据:
#Data Creation
Day1<- rep(1,24)
Day2<- rep(2,24)
Day3<- rep(3,24)
Day<- c(Day1,Day2,Day3)
Hour<- rep(0:23,3)
Net <- round(rnorm(length(Day),mean = 2))
Dat<- data.frame(Day= Day,Hour= Hour,Net= Net)
#Populate missing observations
Dat[27,3]<- NA
Dat[31,3]<- NA
Dat
我最初应用了一个函数(如下),该函数将定位单个缺失值,然后索引缺失的数据点以定位缺失点前后 24 小时的行并取其平均值。
Dat$new.net<- sapply(Dat[,3],function(x)
if_else(is.na(x), mean(c(Dat[which(is.na(Dat),arr.ind = T)[1]-24,3],Dat[which(is.na(Dat),arr.ind = T)[1]+24,3])),x))
我找不到一种方法来使我用于 1 个缺失值的函数适用于多个缺失值,从而为每个缺失值生成唯一的平均值。目前,由于“Dat[which(is.na(Dat),arr.ind = T)[1]”,代码仅使用第一个缺失值的平均值
我如何更改我的代码以处理多个缺失值,或者是否有更优雅的解决方案?
附言。我知道如果前 23 小时或最后 23 小时内有缺失值,我会遇到问题。当我到达那里时,我会穿过那座桥。
任何帮助将不胜感激!
【问题讨论】: