Рассмотрим упрощенный набор данных (реальный один имеет несколько столбцов и строк):R подведением группой двух переменных
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
Я хочу, чтобы заполнить недостающие значения в весе по сгруппированных срединной Т.П. и ТФ в сочетании
Что я пытался до сих пор является следующее (я использовал dlpyr)
temp <- df %>% group_by(tp,tf) %>% summarise(mvalue = median(weight,na. rm = TRUE))
Это дает темп быть:
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
Теперь я не могу понять, как заполнить недостающие значения в df соответствующей медианой группы.
В моем простом случае есть только один NA, соответствующий тп = СЧ и Tf = РФ, медианное значение, если вы посмотрите на темп является 78,93815
Как мне это сделать вообще? Предлагайте, если у вас есть лучший подход, чем мой первоначальный.
EDIT: Фактический dataframe имеет уникальную переменную Id, если это имеет какое-либо значение или может помочь.
Отлично! очень краткий ответ, можете ли вы предложить то, что я должен делать, если мне нужно продолжить с того места, где я ушел? Я полагаю, что я должен использовать некоторые функции приложения, чтобы проверить значения столбца и соответственно изменить их? –
Аналогичным образом вы можете выполнить команду 'df%>% group_by (tp, tf)%>% mutate (weight = recode (weight, .missing = mean (weight, na.rm = T))). – jazzurro
'is.na' векторизован, нет необходимости в цикле. – Sotos