Как обрабатывать пробелы в именах столбцов?
Я знаю, что предпочтительно, чтобы имена переменных не содержали пробелов. У меня есть ситуация, когда мне нужны диаграммы качества публикации, поэтому в осях и легендах должны быть правильно отформатированные метки, т.е. С пробелами. Так, например, в разработке у меня могут быть переменные, называемые "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
, тогда он работает нормально, но, как я уже сказал, я не хочу, чтобы точка отображалась в легенде названия.
Итак, мои вопросы:
- Есть ли способ обхода проблемы с гранью?
- Есть ли лучший общий подход к решению проблемы пространств (и других символов) в именах переменных, когда я хочу, чтобы последний график включал их? Полагаю, я могу вручную их переоценить, но это похоже на много неприятностей.
Ответы
Ответ 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>