填充 r 中每个 id 中的缺失值

Filling the missing values within each id in r

我有一个数据框有一些行缺失值。这是一个示例数据框:

df <- data.frame(id = c(1,1,1, 2,2,2, 3,3,3),
                 item = c(11,12,13, 24,25,26, 56,45,56),
                 score = c(5,5, NA, 6,6,6, 7,NA, 7))

> df
  id item score
1  1   11     5
2  1   12     5
3  1   13    NA
4  2   24     6
5  2   25     6
6  2   26     6
7  3   56     7
8  3   45    NA
9  3   56     7

id 列对数据集进行分组,我想用相同的分数填充那些 NA 值。

所需的输出应该是:

> df
  id item score
1  1   11     5
2  1   12     5
3  1   13     5
4  2   24     6
5  2   25     6
6  2   26     6
7  3   56     7
8  3   45     7
9  3   56     7

有什么想法吗?

谢谢!

我们可以按 'id' 和 fill

分组
library(dplyr)
library(tidyr)
df %>%
   group_by(id) %>% 
   fill(score, .direction = "downup") %>%
   ungroup

这是另一个以 R 为基数的选项

> transform(df, score = ave(score, id, FUN = function(x) mean(x, na.rm = TRUE)))
  id item score
1  1   11     5
2  1   12     5
3  1   13     5
4  2   24     6
5  2   25     6
6  2   26     6
7  3   56     7
8  3   45     7
9  3   56     7

另一种选择是创建您自己的函数,例如:

fill.in<-function(dataf){
  dataf2<-data.frame()
  for (i in 1:length(unique(dataf$id))){
  
    dataf1<-subset(dataf, id %in% unique(dataf$id)[i])
    
    dataf1$score<-max(dataf1$score,na.rm=TRUE)
    
    dataf2<-rbind(dataf2,dataf1)
  }
  return(dataf2)
}


fill.in(df)