Он вызывает оценку нескольких операторов, но использует только последнее значение в качестве результирующего значения (rvalue, я думаю).
Итак ...
int f() { return 7; }
int g() { return 8; }
int x = (printf("assigning x"), f(), g() );
should результат: x устанавливается в 8.
Попробуйте
shop.data %>%
group_by(hour) %>%
mutate(profit= ifelse(is.na(profit), mean(profit, na.rm=TRUE), profit))
# day hour profit
#1 1 8 100
#2 1 16 200
#3 2 8 50
#4 2 16 60
#5 3 8 75
#6 3 16 130
Или вы можете использовать replace
shop.data %>%
group_by(hour) %>%
mutate(profit= replace(profit, is.na(profit), mean(profit, na.rm=TRUE)))
A (менее элегантный) подход с базовыми функциями:
transform(shop.data,
profit = ifelse(is.na(profit),
ave(profit, hour, FUN = function(x) mean(x, na.rm = TRUE)),
profit))
# day hour profit
# 1 1 8 100
# 2 1 16 200
# 3 2 8 50
# 4 2 16 60
# 5 3 8 75
# 6 3 16 130
na.rm = TRUE
– jbkunst 14 November 2017 в 16:42