【发布时间】:2023-04-06 09:35:01
【问题描述】:
我有一个包含 6 个变量的数据框。对于每一列,同一组的数据相同,但有一些缺失值。我想通过为每个变量复制同一组的值来填充这些缺失值。如果特定组的所有值都缺失,则应填写上述组的值。所以,我希望结果为 df_complete。
这是我尝试过的方法,但是当缺少对任何组的第一次观察时它会失败。无法弄清楚其中有什么问题。
set.seed(123)
df <- data.frame(matrix(rnorm(100), ncol = 5))
df$Group <- letters[1:20]
df <- df[rep(seq_len(nrow(df)), sample(1:10, 20, replace = T)),]
df_complete <- df
df$X1[sample(1:nrow(df), 15)] <- NA
df$X2[sample(1:nrow(df), 10)] <- NA
df$X3[sample(1:nrow(df), 25)] <- NA
df$X4[sample(1:nrow(df), 10)] <- NA
df$X5[sample(1:nrow(df), 15)] <- NA
lvcf <- function(x)
{
miss_ind <- which(is.na(x))
if(length(miss_ind) != 0)
{
if(miss_ind[1]==1)
{
ind1 <- which(!is.na(x))[1]
x[1] <- x[ind1]
miss_ind <- which(is.na(x))
}
for(i in 1:length(miss_ind))
{
x[miss_ind[i]] <- x[miss_ind[i]-1]
}
}
return(x)
}
df_complete <- df %>%
group_by(Group) %>%
sapply(lvcf)
【问题讨论】:
标签: r dplyr missing-data