我想使用两个或更多个间隙中的上一个结转(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
尚不清楚您的第一栏中的内容。您期望的第二列是locf
和nocb
的混合,但是您可以逐列使用标准nafill
:
library(data.table)
apply(df, 2, function(j) {nafill(j, type = "locf")})