Подтвердить что ты не робот

Как обрабатывать пробелы в именах столбцов?

Я знаю, что предпочтительно, чтобы имена переменных не содержали пробелов. У меня есть ситуация, когда мне нужны диаграммы качества публикации, поэтому в осях и легендах должны быть правильно отформатированные метки, т.е. С пробелами. Так, например, в разработке у меня могут быть переменные, называемые "Pct.On.OAC" и Age.Group, но в моем последнем сюжете мне нужно "% on OAC" и "Age Group":

'data.frame':   22 obs. of  3 variables:
 $ % on OAC           : Factor w/ 11 levels "0","0.1-9.9",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ Age Group          : Factor w/ 2 levels "Aged 80 and over",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Number of Practices: int  47 5 33 98 287 543 516 222 67 14 ...

Но когда я пытаюсь построить их:

ggplot(dt.m, aes(x=`% on OAC`,y=`Number of Practices`, fill=`Age Group`)) +
    geom_bar()
)

нет проблем с этим. Но когда я добавляю грань:

ggplot(dt.m, aes(x=`% on OAC`,y=`Number of Practices`, fill=`Age Group`)) +
    geom_bar() +
    facet_grid(`Age Group`~ .) 

Я получаю Error in [. data.frame (base, names(rows)) : undefined columns selected

Если я изменяю Age Group на Age.Group, тогда он работает нормально, но, как я уже сказал, я не хочу, чтобы точка отображалась в легенде названия.

Итак, мои вопросы:

  • Есть ли способ обхода проблемы с гранью?
  • Есть ли лучший общий подход к решению проблемы пространств (и других символов) в именах переменных, когда я хочу, чтобы последний график включал их? Полагаю, я могу вручную их переоценить, но это похоже на много неприятностей.
4b9b3361

Ответ 1

Это "ошибка" в пакете ggplot2, которая исходит из того факта, что функция as.data.frame() во внутренней функции ggplot2 quoted_df преобразует имена в синтаксически допустимые имена. Эти синтаксически допустимые имена не могут быть найдены в исходном фрейме данных, следовательно, ошибка.

Чтобы напомнить вам:

синтаксически допустимые имена состоят из букв, цифр и точки или подчеркивать символы и начинать с буквы или точки (но точка за ним не может следовать число)

Есть причина для этого. Также существует причина, по которой ggplot позволяет устанавливать метки с помощью labs, например, используя следующий фиктивный набор данных с допустимыми именами:

X <-data.frame(
  PonOAC = rep(c('a','b','c','d'),2),
  AgeGroup = rep(c("over 80",'under 80'),each=4),
  NumberofPractices = rpois(8,70)
  ) 

Вы можете использовать лаборатории в конце, чтобы этот код работал

ggplot(X, aes(x=PonOAC,y=NumberofPractices, fill=AgeGroup)) +
  geom_bar() +
  facet_grid(AgeGroup~ .) + 
  labs(x="% on OAC", y="Number of Practices",fill = "Age Group")

Чтобы создать

enter image description here

Ответ 2

Вы спросили: "Существует ли более общий общий подход к решению проблемы пространств (и других символов) в именах переменных" и да есть несколько:

  • Просто не используйте их, так как все будет нарушено, как вы здесь переживали.
  • Используйте функцию make.names() для создания безопасных имен; это используется R также для создания идентификаторов (например, с помощью подчеркивания для пробелов и т.д.).
  • Если необходимо, защитите небезопасные идентификаторы с помощью обратных ссылок.

Пример для двух последних точек:

R> myvec <- list("foo"=3.14, "some bar"=2.22)
R> myvec$'some bar' * 2
[1] 4.44
R> make.names(names(myvec))
[1] "foo"      "some.bar"
R>