#r #crosstab
#r #перекрестная таблица
Вопрос:
Я чувствую, что на это есть простой ответ, поскольку на этом форуме так много похожих вопросов, но по какой-то причине ни один из них, похоже, не применим.
У меня есть данные опроса вместе с назначениями сегментов, загруженными через Excel в R. Структура моих данных в основном такова (около 50 полей, включая назначение сегмента, для каждого из 330 респондентов):
ResponsentID | Household.Size | Children.in.household | Сегмент |
---|---|---|---|
1 | 3 | ДА | Сегмент 1 |
2 | 2 | НЕТ | Сегмент 3 |
3 | 1 | НЕТ | Сегмент 2 |
4 | 2 | НЕТ | Сегмент 5 |
5 | 4 | ДА | Сегмент 1 |
Как вы видите выше, некоторые переменные являются числовыми, некоторые — категориальными. Я хочу создать простую перекрестную таблицу, не требующую статистического тестирования, которая суммирует каждое поле для каждого сегмента. Т.Е. Для каждого сегмента, какой% респондентов в этом сегменте имеют размер домохозяйства 1, 2, 3 и т.д.; у какого% есть дети в домохозяйстве и т.д.
Я экспериментировал как с перекрестной таблицей, так и с перекрестной таблицей (я понимаю, что последняя является просто оболочкой для первой), но я ничего не могу заставить работать. Большинство решений, размещенных на форумах, предназначены для отдельных полей, и я бы хотел избежать создания отдельных таблиц для каждого из 50 полей, если это возможно.
Пожалуйста, дайте мне знать, есть ли простой способ подойти к этому!
Комментарии:
1. Можете ли вы подробнее описать, как это будет выглядеть? Мне кажется, что они, естественно, должны быть отдельными таблицами, но, возможно, я не видел формат, о котором вы думаете.
2. @JonSpring Я предполагаю, что запрос был на автоматическую генерацию 50 таблиц.
3. Основываясь на перекрестных таблицах, которые мы получили от подрядчиков, я полагаю, что вы правы — для каждого поля будет отдельная таблица. Однако я бы предпочел не создавать отдельную таблицу для 50 полей — ie. у меня есть 50 строк кода, каждая из которых генерирует таблицу — если мне не нужно (хотя я бы согласился на это, если бы пришлось — я тоже не знаю, как это сделать).
4. @IRTFM точно — я надеялся, что есть функция, которая, по сути, говорит: «для каждого из этих полей создайте сводную таблицу, в которой строки — это значения полей, а столбцы — сегменты, а ячейки содержат% каждого сегмента, который соответствует каждому значению поля»
5. посмотрите
tbl_summary
изgtsummary
пакета.
Ответ №1:
Используя данные, воспроизводимые в примечании в конце, и предполагая, что у нас есть небольшое количество сегментов (а именно. 5) и большим количеством переменных попробуйте table1 или аналогичные пакеты. (Сначала преобразуйте все столбцы в коэффициент, если вы хотите обрабатывать числовые столбцы как отдельные элементы.)
library(table1)
tab1 <- table1(~ . | Segment, DF[-1])
as.data.frame(tab1)
предоставление:
Segment 1 Segment 2 Segment 3 Segment 5 Overall
1 (N=2) (N=1) (N=1) (N=1) (N=5)
2 Household.Size
3 Mean (SD) 3.50 (0.707) 1.00 (NA) 2.00 (NA) 2.00 (NA) 2.40 (1.14)
4 Median [Min, Max] 3.50 [3.00, 4.00] 1.00 [1.00, 1.00] 2.00 [2.00, 2.00] 2.00 [2.00, 2.00] 2.00 [1.00, 4.00]
5 Children.in.household
6 Yes 2 (100%) 0 (0%) 0 (0%) 0 (0%) 2 (40.0%)
7 No 0 (0%) 1 (100%) 1 (100%) 1 (100%) 3 (60.0%)
Примечание
DF <-
structure(list(RespondentID = 1:5, Household.Size = c(3L, 2L,
1L, 2L, 4L), Children.in.household = c("Yes", "No", "No", "No",
"Yes"), Segment = c("Segment 1", "Segment 3", "Segment 2", "Segment 5",
"Segment 1")), class = "data.frame", row.names = c(NA, -5L))
Комментарии:
1. Привет, большое спасибо за вашу помощь! Я не мог заставить вышеупомянутое решение работать, table1() требовал слишком много входных данных, и я продолжал сталкиваться с ошибками. Однако предложение @ George Savva о tbl_summary сделало именно то, что мне было нужно. У меня были небольшие проблемы с экспортом выходных данных, которые представляют собой большой файл, который нельзя принудительно преобразовать во фрейм данных, но я справился с этим, открыв результаты в новом окне и скопировав их в Excel. Спасибо!!
2. Вы должны попробовать все пакеты по ссылке в ответе, а не только пример пакета. Список в ссылке включает table1, gtsummary и многие другие пакеты.
Ответ №2:
Другим пакетом, который может подойти для этого, является janitor, затем функция tabyl в этом пакете: