Кажется, это должно быть просто, но я этого не вижу.
Допустим, у меня есть фрейм данных, например:
df <- data.frame(type=c(rep("A", 5), rep("B",5)),
stage=rep(c("1","2", "3", "4", "5"),2),
val=c(rnorm(n=5, mean=1000, sd=300),rnorm(n=4, mean=1000, sd=100), NA)
)
Я хочу иметь возможность заменить NA в группе type=="B"
средним значением группы B, но опустить некоторые «валы» из B (например, где «стадия» равна 1 ИЛИ стадия равна 2 - или любому другому условию). Используя dplyr
и zoo
, его легко заполнить средним значением группы:
df %>% dplyr::group_by(type) %>% dplyr::mutate_at("val", zoo::na.aggregate)
, но я не могу понять, как исключить vals из группы на основе условия в "stage". В идеале, решение dplyr, но включая зоопарк, тоже было бы хорошо.