如何根据以前和将来的值填充缺失或空值?

杰伊·汗

假设我有以下数据集

ID A 
1  0
1  0
1  0
1  X
2  X
2  X
2  0
2  X
3  X
3  0
3  X
3  Y
4  X
4  X
4  0
4  Y

我想基于A的过去和未来值填充此数据集(变量A)。例如,对于ID= 1前三个值,基于未来值也将变为X。对于ID=2,丢失的值将变为X,因为过去和将来的值也为X。对于ID = 3将来,即使将来还有另一个值Y,它也会变为X,但是其相邻的值为X,因此它将变为X。因为ID= 4我们将仅基于丢失值过去的。

基本上,该算法应首先查看过去的值;如果没有过去的值可用,则应使用将来的值。

我知道根据均值和中位数来填充缺失值,但是由于变量A不是数字,并且标准在每个步骤都在不断变化,我该如何解决这个问题?

阿克伦

我们可以使用na.locffromzoo来用先前的值填充缺失的值。为此,我们将“ 0”值转换为“ NA”。使用data.table,我们可以将'data.frame'转换为'data.table'(setDT(df1)),并按'ID'列分组,我们使用na.locfna.rm=FALSE选项使用先前的非缺失值填充缺失值然后,我们可以再次运行na.locf带有fromLast=TRUE选项的选项,以使观察结果向后进行,并将其余部分填充到NAs“ A”列中。

library(zoo)
library(data.table)
is.na(df1$A) <- df1$A==0
setDT(df1)[,A := na.locf(na.locf(A, na.rm=FALSE), fromLast=TRUE) , by = ID]
df1
#    ID A
# 1:  1 X
# 2:  1 X
# 3:  1 X
# 4:  1 X
# 5:  2 X
# 6:  2 X
# 7:  2 X
# 8:  2 X
# 9:  3 X
#10:  3 X
#11:  3 X
#12:  3 Y
#13:  4 X
#14:  4 X
#15:  4 X
#16:  4 Y

数据

df1 <- structure(list(ID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 
3L, 3L, 4L, 4L, 4L, 4L), A = c("0", "0", "0", "X", "X", "X", 
"0", "X", "X", "0", "X", "Y", "X", "X", "0", "Y")), .Names = c("ID", 
"A"), class = "data.frame", row.names = c(NA, -16L))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章