用最小间隔对R中的NA进行最后或下一次观察插值

问题描述 投票:0回答:1

我想使用两个或更多个间隙中的上一个结转(locf)或下一个结转(nocb)来估算缺失值。

为了确定填充缺失值的方向(上/下),对数据帧中的第一列(间隔​​)进行加权。插值(locf / nocb)应该从最小值的一端开始(与NAs行向外对应的间隔值)。默认的fillna是locf。

[示例:异常填充的逻辑:在ID2列的第5-7行(包括标题)中,方向将为nocb,因为(Interval [7,] value = 50)小于Interval [5,] value = 100 。

尝试使用df1 <-df %>%fill(ID1, ID2, ID3,which.min(Interval)) %>% #default direction down fill(ID1, ID2, ID3, .direction = "up",which.min(Interval))不能正常工作,请协助纠正它或建议其他有效的R解决方案。预先感谢您的帮助。

输入

df = data.frame(
             Interval = c(0,20,80,100,50,50,130,100,70,80,200), 
             ID1 = c(0,1,1,0,NA,NA,NA,NA,1,NA,1), 
             ID2 = c(1,0,0,NA,NA,NA,1,1,3,NA,1), 
             ID3 = c(1,NA,1,0,3,NA,NA,NA,1,NA,1) 
)

Interval    ID1 ID2 ID3
0   0   1   1
20  1   0   NA
80  1   0   1
100 0   NA  0
50  NA  NA  3
50  NA  NA  NA
130 NA  1   NA
100 NA  1   NA
70  1   3   1
80  NA  NA  NA
200 1   1   1

预期输出

Interval    ID1 ID2 ID3
0   0   1   1
20  1   0   NA
80  1   0   1
100 0   1   0
50  0   1   3
50  0   1   3
130 0   1   3
100 0   1   3
70  1   3   1
80  NA  NA  NA
200 1   1   1

r dplyr tidyverse zoo imputets
1个回答
0
投票

尚不清楚您的第一栏中的内容。您期望的第二列是locfnocb的混合,但是您可以逐列使用标准nafill

library(data.table)
apply(df, 2, function(j) {nafill(j, type = "locf")})
© www.soinside.com 2019 - 2024. All rights reserved.