Я пытался найти похожий вопрос, но не смог найти ничего похожего.
У меня есть фрейм данных df с сотнями строк и несколькими переменными.Первая переменная level , которая изменяется от 1 до 8.
Например:
df<- data.frame(level = c(1,1,1,2,2,3,4,5,6,7,8), CODE = c("1234", "3452", "1234", "7654","6547","6546", "7683", "6543", "7683", "6543", "7683"), ADD_ALLOW_MEAL = c(NA, "Y", "Y", "N", "N", NA, NA, "Y", "Y", "N", 'N'), ALLOW_MEALLOW = c(NA, 40, 60, NA, NA, NA, NA, 50, 70, NA, NA))
> df
level CODE ADD_ALLOW_MEAL ALLOW_MEALLOW
1 1 1234 <NA> NA
2 1 3452 Y 40
3 1 1234 Y 60
4 2 7654 N NA
5 2 6547 N NA
6 3 6546 <NA> NA
7 4 7683 <NA> NA
8 5 6543 Y 50
9 6 7683 Y 70
10 7 6543 N NA
11 8 7683 N NA
Мне нужно создать новые данныекадр, который будет иметь только 8 строк (8 уровней от df).Обычно я использовал бы просто:
df %>%
group_by(level) %>%
summarise()
Проблема в том, что мне нужно создать несколько очень пользовательских столбцов на отфильтрованных данных, все на уровне .
Пример:
df %>%
group_by(level) %>%
summarise(
Meal_Average = filter(., ADD_ALLOW_MEAL =="Y" & ALLOW_MEALLOW>0) %>% {ifelse(str_detect(.$CODE, "2")=="TRUE", round(mean(.$ALLOW_MEALLOW, na.rm = TRUE),3), NA_real_ )}
)
Я получаю ошибку:
Column `Meal_Average` must be length 1 (a summary value), not 4
Мой желаемый результат будет:
level Meal_Average
1 1 50
2 2 NA
3 3 NA
4 4 NA
5 5 NA
6 6 NA
7 7 NA
8 8 NA
Любые идеи, как я могусделать это?
Спасибо !!