#r #ggplot2
#r #ggplot2
Вопрос:
У меня есть фрейм данных, который выглядит как
Role <- letters(1:3)
df <- data.frame(Role,
Female1=c(1,4,2),
Male1 = c(3,0,0),
Female2 = c(3,5,3),
Male2 = c(1,3,0),
FemaleTotal = Female1 Female2,
MaleTotal = Male1 Male2)
И хотите создать линейчатую диаграмму, сгруппированную по мужскому типу, женскому типу для каждой категории столбцов (в этом примере это было бы 1 и 2), с распределением ролей, а также другой график только с итоговыми значениями. Чтобы получить только итоговые данные, я мог бы использовать melt () и подмножество фрейма данных, чтобы в нем были только эти столбцы, но это кажется беспорядочным и не помогает с основным графиком, который я хочу создать.
Комментарии:
1. Вы пробовали запускать свой код? Работает ли это для вас? Первая строка выдает ошибку
could not find function "letters"
. Вdata.frame
вызове также ошибка. Пожалуйста, убедитесь, что код, которым вы делитесь, действительно воспроизводим.
Ответ №1:
Одним из вариантов было бы изменить формат ‘long’
library(dplyr)
library(tidyr)
library(ggplot2)
df %>%
pivot_longer(cols = -Role, names_to = c( "group", '.value'),
names_sep="(?<=[a-z])(?=(\d |Total))") %>%
pivot_longer(-c(Role, group)) %>%
ggplot(aes(x = Role, y = value, fill = group))
geom_col()
facet_wrap(~ name)
-вывод
данные
df <- structure(list(Role = c("a", "b", "c"), Female1 = c(1, 4, 2),
Male1 = c(3, 0, 0), Female2 = c(3, 5, 3), Male2 = c(1, 3,
0), FemaleTotal = c(4, 9, 5), MaleTotal = c(4, 3, 0)), row.names = c(NA,
-3L), class = c("tbl_df", "tbl", "data.frame"))
Комментарии:
1. Действительно полезно, спасибо! Быстрый вопрос, допустим, я хотел бы отобразить только столбцы с 1 и итогом, как бы я это сделал? Не знаком с pivot_longer, поэтому все это выглядит странно для меня. Не совсем уверен, что происходит с материалом names_sep
2. @Adam вы можете
filter
после второго «поворота», т.Е.%>% filter(name != "1") %>% ggplot(
3. Кажется, я не могу запустить код, получаю это сообщение об ошибке Ошибка: Не удается подмножество элементов, которые не существуют. x Местоположений 1, 2, 3, 4, 5, и т.д. не существует. i Есть только 0 элементов. Запустите
rlang::last_error()
, чтобы увидеть, где произошла ошибка. Дополнительно: Предупреждающее сообщение: Ожидается 2 штуки. Недостающие фрагменты заполненыNA
в 24 строках [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, …]. Я предполагаю, что из-за части name_sep. Для получения некоторой информации о mopre имена моих столбцов на самом деле больше похожи на «Примененный женщиной X» и «Успешный мужчина Y», если это поможет.4. @Adam Это основано на том же наборе данных в моем сообщении или на другом. Можете ли вы использовать
dput
, чтобы показать небольшой пример, показывающий ошибку