#r #categorical-data
#r #категориальный-данные
Вопрос:
Я пытаюсь создать код или найти в R, чтобы преобразовать мои категориальные данные, полученные из вопросника, в таблицу непредвиденных обстоятельств. Вот мой пример данных
Age = sample(c("15--25", "26-35", "36-45", " "45"), 90, replace = TRUE)
Volunteering_yr = sample(c(‘1yr’, ‘2yr’, ‘3yr>’), 90, replace = TRUE)
Q1 = sample(c(‘A’,’B’,’C’,’D, ‘E’), 90, replace =TRUE)
Q2= sample(c(‘A’,’B’,’C’,’D, ‘E’), 90, replace =TRUE)
Q3 = sample(c(‘A’,’B’,’C’,’D, ‘E’), 90, replace =TRUE)
Q4 = sample(c(‘A’,’B’,’C’,’D, ‘E’), 90, replace =TRUE)
Q5 = sample(c(‘A’,’B’,’C’,’D, ‘E’), 90, replace =TRUE)
Db = data.frame(Age,Volunteering_yr , Q1, Q2, Q3, Q4, Q5)
Я хотел бы, чтобы данные были реорганизованы либо по годам, либо по возрасту добровольцев, но сгруппированы по количеству ответов (например, A, B, C, D и E), что-то вроде этого
Есть предложения? Большое спасибо
Комментарии:
1. Где находятся столбцы Q? Что конкретно представляют числа в таблице?
2. Столбцы Q представляют вопросы, но они мне не нужны в моей окончательной таблице. Спасибо
Ответ №1:
Вы можете использовать xtabs
функцию:
xtabs(~Volunteering_yr Q1,Db)
Q1
Volunteering_yr A B C D E
1yr 6 7 3 6 7
2yr 6 4 1 5 7
3yr> 7 6 5 8 12
Я не знаю о простой базовой функции R для одновременного выполнения всех кварталов, но это было бы достаточно просто с tidyverse:
library(tidyverse)
Db %>%
pivot_longer(-c(Age,Volunteering_yr)) %>%
group_by(Volunteering_yr, value) %>%
tally() %>%
pivot_wider(names_from = value, values_from = n)
## A tibble: 3 x 6
## Groups: Volunteering_yr [3]
# Volunteering_yr A B C D E
# <chr> <int> <int> <int> <int> <int>
#1 1yr 33 33 25 26 28
#2 2yr 28 18 20 23 26
#3 3yr> 43 46 33 31 37
Комментарии:
1. Привет, Ян, но это только для Q1, и я хочу получить сумму всех A за разные годы.
Ответ №2:
Попробуйте это. Я использовал пакет pacman для загрузки библиотек, но вы могли бы сделать их отдельно.
Db <- data.frame(Age=sample(c("15-25","26-35","36-45"), 90, replace=T),
Volunteering_yr=sample(c("1yr","2yr","3yr"), 90, replace=T),
Q1 = sample(c("A","B","C","D","E"), 90, replace =TRUE),
Q2 = sample(c("A","B","C","D","E"), 90, replace =TRUE),
Q3 = sample(c("A","B","C","D","E"), 90, replace =TRUE),
Q4 = sample(c("A","B","C","D","E"), 90, replace =TRUE),
Q5 = sample(c("A","B","C","D","E"), 90, replace =TRUE))
pacman::p_load(dplyr, magrittr)
Db %<>% mutate(across(c("Age", "Volunteering_yr"), factor))
with(Db, table(Age, Volunteering_yr))
Volunteering_yr
Age 1yr 2yr 3yr
15-25 9 16 6
26-35 9 13 8
36-45 11 7 11