根据R中上一行或下一行的值在列中添加缺失值
Add missing value in column according to value of previous or next row in R
我有一些纵向数据,需要根据一些规则来估算缺失值:
如果一个人的第一条后续数据缺失,则补上下一行的值;
如果一个人的非first follow-up数据缺失,则加上上一行的值;
如果连续多个后续数据缺失,则加上前一个非缺失行的值。
这是一个例子,
dat<-data.frame(id=c(1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3),b6=c(NA,1,1,1,1,1,1,1,1,1,NA,3,NA,NA,5,5,5,5,3,NA,NA))
dat_imputed<-data.frame(id=c(1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3),b6=c(1,1,1,1,1,1,1,1,1,1,1,3,3,5,5,5,5,5,3,3,3))
感谢任何建议!
您可以使用 approxfun
在 ave
中添加缺失值以进行分组,例如:
dat$b6 <- ave(dat$b6, dat$id, FUN=function(x)
approxfun(x, method = "constant", rule=2)(seq_along(x)))
identical(dat, dat_imputed)
#[1] TRUE
按id分组,向下填充值,然后向上填充。我想这就是你需要的。
library(dplyr)
library(tidyr)
res <- dat %>%
group_by(id) %>%
fill(b6, .direction = "down") %>%
fill(b6, .direction = "up")
我有一些纵向数据,需要根据一些规则来估算缺失值:
如果一个人的第一条后续数据缺失,则补上下一行的值;
如果一个人的非first follow-up数据缺失,则加上上一行的值;
如果连续多个后续数据缺失,则加上前一个非缺失行的值。
这是一个例子,
dat<-data.frame(id=c(1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3),b6=c(NA,1,1,1,1,1,1,1,1,1,NA,3,NA,NA,5,5,5,5,3,NA,NA))
dat_imputed<-data.frame(id=c(1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3),b6=c(1,1,1,1,1,1,1,1,1,1,1,3,3,5,5,5,5,5,3,3,3))
感谢任何建议!
您可以使用 approxfun
在 ave
中添加缺失值以进行分组,例如:
dat$b6 <- ave(dat$b6, dat$id, FUN=function(x)
approxfun(x, method = "constant", rule=2)(seq_along(x)))
identical(dat, dat_imputed)
#[1] TRUE
按id分组,向下填充值,然后向上填充。我想这就是你需要的。
library(dplyr)
library(tidyr)
res <- dat %>%
group_by(id) %>%
fill(b6, .direction = "down") %>%
fill(b6, .direction = "up")