Я относительно не знаком с R и новичком с ggplot, но мне не удалось найти ответ на кажущуюся простой проблему. Используя ggplot, я хотел бы составить гистограмму, в которой складываются два из трех или более уровней графа.Уровни группирования/уровня стекирования в гистограмме ggplot
По сути, это тип данных, я смотрю на:
df <- data.frame(Answer=c("good","good","kinda good","kinda good",
"kinda good","good","bad","good","bad"))
Это дает мне фактор с тремя уровнями, два из которых очень похожи:
Answer
1 good
2 good
3 kinda good
4 kinda good
5 kinda good
6 good
7 bad
8 good
9 bad
Если я пусть ggplot переходят эти данные для меня теперь,
c <- ggplot(df, aes(df$Answer))
c + geom_bar()
Я получу гистограмму с тремя колонками. Тем не менее, я хотел бы получить два столбца, один из которых должен быть стеком из двух уровней фактора «хороший» и «добрый», все еще явно отделенный.
Я работаю со 100 колонками ввода (исследование по орфографии), которые мне нужно будет выполнять вручную, поэтому я хотел бы сделать код максимально легко регулируемым. Некоторые из них имеют более десяти уровней, и мне нужно будет отсортировать их по трем столбцам. Поэтому в большинстве случаев мои данные скорее всего выглядят так:
df <- data.frame(Answer=c("good","goood","goo0d","good",
"I don't know","Bad","bad","baaad","really bad"))
Я бы поэтому разделил это на три категории. Примерно в половине случаев я мог бы, вероятно, фильтровать, используя сопоставление с образцом, потому что я буду смотреть на использование пробелов. Другая половина, однако, смотрит на капитализацию, которая станет немного грязной или, по крайней мере, очень утомительной.
Я подумал о двух разных подходах к более эффективно решать эту проблему:
Просто переписывание уровней фактора, но это приведет к потере информации (и я хотел бы сохранить эти два уровня отдельно). Я хотел бы сохранить имена исходных уровней, потому что я думаю, что мне нужно, чтобы они отображали отношение внутри этого столбчатого столбца и правильно маркировали столбец.
Я мог бы разделить соответствующий столбец/коэффициент на два отдельных столбца/коэффициенты и нарисовать их рядом друг с другом и таким образом создать «поддельное» третье измерение. Это выглядит как наиболее перспективный подход, но прежде чем я буду работать через 100 столбцов данных, есть ли более элегантный подход, возможно, в пакете ggplot2, где я мог бы просто указать/сгруппировать имена уровней вместо изменения/переупорядочения кадр данных за ним?
Спасибо!
'ggplot (ДФ, АЕС (grepl («хороший», ответ) , fill = Answer)) + geom_bar() 'будет грубо.в основном это класть группы на x (хорошо или не хорошо) и раскрасить «Ответ» – rawr
Спасибо за ответ так быстро, за редактирование и, конечно, за ответ! Это хорошо работает с двумя группами! Поскольку вы только отправили свой ответ в качестве комментария, я предполагаю, что может быть другое решение, если мне нужно сгруппировать десять уровней в три столбца? – Sarah
Я стараюсь не поощрять ggplot:} группировать несколько групп на меньшее, не проблема ggplot. если вы хотите сделать n-группы, 'grepl' не будет чрезвычайно полезен. если вы разместите некоторые данные, которые больше похожи на то, что вам нужно (а не только на два уровня), это помогло бы – rawr