Получение ошибки: Ошибка: эстетика должна быть действительными столбцами данных - PullRequest
0 голосов
/ 16 июня 2020

У меня есть фрейм данных, назовите его DASS:

structure(list(familySID = c(19342, 19267, 19192, 19568, 19415, 
19271), time = c("Pre", "Post", "Follow-Up", "Pre", "Post", "Follow-Up"), DASS_stress = c(10, 
12, 16, NA_real_, 0, NA_real_), DASS_anx = c(6, 
NA_real_, 5, 14, NA_real_, 10), DASS_depr = c(5, 
6, NA_real_, 6, 11, NA_real_)), row.names = c("3", 
"4", "5", "6", "7", "8"), class = "data.frame")

Теперь это просто заголовок моего полного фрейма данных, который имеет 741 запись.

Я пытаюсь построить график с группами «Pre», «Post» и «Follow-Up» для каждой шкалы DASS_stress, DASS_anx и DASS_depr. Мне нужны средние значения этих шкал, а не исходные значения.

Раньше мне помогали, когда кто-то предлагал сначала сделать длинный формат. У меня есть код их решения здесь:

DASS %>%
  pivot_longer(starts_with("DASS_"), names_to = "DASS", values_to = "val") %>%
  group_by(time, DASS) %>%
  summarize(
    n = sum(!is.na(val)), 
    mu = mean(val, na.rm = TRUE), 
    se = sd(val, na.rm = TRUE) / sqrt(n), 
    ci = se * qt(0.95/2 + 0.5, n-1)
  ) %>%
  ggplot(aes(x = DASS, y = mu, fill = time)) + 
    geom_bar(stat = "identity", position = position_dodge(0.9)) + 
    geom_errorbar(aes(ymin = mu-se, ymax = mu+se), 
                  position = position_dodge(.9), width = 0.3)

Похоже, они хорошо работают. Тем не менее, я попытался это сделать и получил следующую ошибку:

Error: Aesthetics must be valid data columns. Problematic aesthetic(s): fill = time. 
Did you mistype the name of a data column or forget to add after_stat()?

Тогда я попытался переработать свои данные, сделав отдельный фрейм данных под названием DASS_longer для длинного формата DASS, чтобы я мог понять, что пошло не так. в графике. К сожалению, когда я суммирую данные, я получаю среднее значение только для одной записи и без столбца времени.

Кто-нибудь знает, где что-то пошло не так? Я начинаю думать, что это потому, что в моем фактическом фрейме данных было намного больше записей. Опять же, я получаю очень конкретную c ошибку, связанную с aes (в частности, fill = time). Хотя время указывается вверху при обозначении групп. Запуск rlang дает мне дополнительную информацию:

rlang::lasterror()
<error/rlang_error>
Aesthetics must be valid data columns. Problematic aesthetic(s): fill = time. 
Did you mistype the name of a data column or forget to add after_stat()?
Backtrace:
 1. (function (x, ...) ...
 2. ggplot2:::print.ggplot(x)
 4. ggplot2:::ggplot_build.ggplot(x)
 5. ggplot2:::by_layer(function(l, d) l$compute_aesthetics(d, plot))
 6. ggplot2:::f(l = layers[[i]], d = data[[i]])
 7. l$compute_aesthetics(d, plot)
 8. ggplot2:::f(..., self = self)

Есть мысли? Кроме того, я приложил график, который я ищу, это график, который человек, который помог мне раньше, получил код.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...