通过两组变量汇总

Vik*_*h B 3 r dplyr

考虑一个简化的数据集(真正的数据集有更多的列和行):

df
    tp tf   weight
1  FWD RF 78.86166
2   MF LF 81.04566
3  DEF LF 80.70527
4  DEF LF 82.96071
5  DEF RF 78.42544
6   GK LF 79.37686
7  DEF RF 78.79928
8   MF RF       NA
9   MF RF 78.93815
10 DEF RF 80.00284
Run Code Online (Sandbox Code Playgroud)

我想用tp和tf组合的分组中位数来填充重量中的缺失值

我到现在为止尝试的是以下(我使用过dlpyr)

temp <- df %>% group_by(tp,tf) %>% summarise(mvalue = median(weight,na. rm = TRUE))
Run Code Online (Sandbox Code Playgroud)

这给了温度:

temp
Source: local data frame [6 x 3]
Groups: tp [?]

      tp     tf   mvalue
  <fctr> <fctr>    <dbl>
1    DEF     LF 81.83299
2    DEF     RF 78.79928
3    FWD     RF 78.86166
4     GK     LF 79.37686
5     MF     LF 81.04566
6     MF     RF 78.93815
Run Code Online (Sandbox Code Playgroud)

现在我无法弄清楚如何用相应的组中位数填充df中的缺失值.

在我的简单情况下,只有一个NA对应于tp = MF和tf = RF,如果你查看temp的中值是78.93815

我一般如何做到这一点?如果你有一个比我最初的方法更好的方法,请建议.

编辑: 实际数据框有一个唯一的Id变量,如果这有任何区别或可以帮助.

Sot*_*tos 5

你可以试试,

library(dplyr)
df %>% 
   group_by(tp, tf) %>% 
   mutate(weight = replace(weight, is.na(weight), median(weight, na.rm = TRUE)))
Run Code Online (Sandbox Code Playgroud)