У меня есть набор данных опроса, в которых респонденты могли отметить несколько ответов в ответ на ряд связанных вопросов. Конечная цель состоит в том, чтобы поместить это в сгруппированную гистограмму с каждой категорией (например, «Q13_heatwave_sleep») в виде группы и подсчетом каждого уникального ответа в этой группе в виде столбцов (например, 1, 2, 3, 4, 5). Я считаю, что мне нужно использовать separate_rows()
, чтобы получить каждое из значений, разделенных запятыми, в свою собственную строку, а затем использовать pivot_longer()
, чтобы получить это в длинном формате для ggplot. Я изо всех сил пытаюсь заставить separate_rows()
пройтись по каждому столбцу, а затем работать с pivot_longer. Вот воспроизводимый пример:
require(tidyverse)
# Ingest some data
q13_data <- structure(list(Q13_heatwave_sleep = c("1", "4,2", "5", "5,4,3,2",
"5,4", "5", "5", "2", "5,4", "5"), Q13_heatwave_travel = c("1",
"4,2", "4", "5,4,3,2", "1", "2", "1", "2", "5", "5,4"), Q13_heatwave_health = c("1",
"4,2", "2", "5,4,3,2", "2", "3", "1", "2", "5", "3"), Q13_flooded_home = c("1",
"5,3", "2", "3", "4,2", "5", "4", "2", "3", "1"), Q13_flooding_local = c("1",
"3,2", "2", "3", "1", "5", "1", "2", "3", "5"), Q13_flood_risk_relocation = c("1",
"2,1", "2", "1", "2", "1", "4", "1", "3", "1"), Q13_snow_damage = c("1",
"4,3", "2", "1", "1", "3", "1", "1", "1", "4,3"), Q13_snow_disruption = c("1",
"5,4", "5", "5,3", "3", "3", "1", "1", "1", "3"), Q13_water_shortages = c("1",
"4,2", "5", "5,4,3,2", "2", "3", "4", "2", "5", "4"), Q13_food_restrictions = c("1",
"4,3", "4", "1", "2", "1", "4", "1", "1", "5"), Q13_wildfires = c("1",
"5,4", "1", "1", "2", "2", "4", "1", "1", "1")), class = c("rowwise_df",
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -10L), groups = structure(list(
.rows = structure(list(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L,
10L), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame")))
q13_data <- separate_rows(q13_data, Q13_heatwave_travel) # totally at a loss here as to how to get this to work across all columns
q13_data %>%
pivot_longer(Q13_heatwave_sleep:Q13_wildfires, names_to = "question", values_to = "resp")
Как я могу растянуть этот фрейм данных и подготовить его к построению?
Как говорит Грегор, поверните сначала потом, чтобы разделить строки:
q13_data %>%
pivot_longer(cols = everything()) %>%
separate_rows(value, sep = ",")
Ага - вот оно! Спасибо. Мне не хватало столбцов = все()
Сначала разверните, а затем разделите ряды.