Crosstab с несколькими объектами

В SPSS (относительно) легко создать кросс-вкладку с несколькими переменными с помощью факторов (или значения) как заголовок таблицы. Так, что-то как следующее (составил данные, и т.д.). Q1, Q2 и Q3 у каждого есть или 1, 2 или 3 для каждого человека. Я просто оставил их как числа, но они могли быть факторами, ни один, казалось, не помог решить проблему.

                        1 (very Often)   2 (Rarely)   3 (Never)
   Q1. Likes it           12              15             13
   Q2. Recommends it      22              11             10
   Q3. Used it            22              12             9

В SPSS можно даже запросить строку, колонну или общие проценты.

Я попробовал таблицу (), ftable (), xtab (), CrossTable () от gmodels и CrossTable () от descr, и ни один из них не может обработать (afaik) несколько переменных; они главным образом, кажется, обрабатывают 1 переменную, пересеченную с другой переменной, и 3-е создает слои.

Существует ли пакет с некоторыми хорошими перекрестными примерами переключения вкладок/таблицы, которые я мог использовать для понимания этого? Я уверен, что пропускаю что-то простое, таким образом, я ценю Вас указывающий, что я пропустил. Возможно, я должен генерировать каждую строку как отдельный список и затем сделать кадр данных и распечатать кадр данных?

ОБНОВЛЕНИЕ: я теперь обнаружил ctab () в пакете catspec, который является также на правильном пути. Интересно, что R не имеет никакого последовательного эквивалента Ctables в SPSS, который является в основном крылом инструмента "переключения вкладок" старые плоские инструменты, используемые для исследования обзора. ctab () пробует и является замечательным 1-м шагом..., но Вы все еще не можете сделать эту таблицу (выше) с ним.

7
задан smci 19 July 2015 в 23:24
поделиться

5 ответов

, просто проверьте пакет изменения формы Хэдли Уикхема . AFAIS, вам понадобится функция cast из пакета.

1
ответ дан 6 December 2019 в 11:48
поделиться

Вы можете использовать пользовательскую функцию для использования rbind () в нескольких таблицах, примерно так:

multitab <- function(...){
   tabs<-list(...)
   tablist<-lapply(tabs,table)
   bigtab<-t(sapply(tablist,rbind))
   bigtab } 
0
ответ дан 6 December 2019 в 11:48
поделиться

В пакете Hmisc есть функция summary.formula , которая может делать что-то в соответствии с вашими пожеланиями. Он очень гибкий, поэтому посмотрите примеры на странице справки, но вот приложение к вашей проблеме:

library(Hmisc)
dd <- data.frame(Q1=sample(1:3, 20, replace=T), Q2=sample(1:3, 20, replace=T), 
                 Q3=sample(1:3, 20, replace=T))  #fake data
summary(~Q1+Q2+Q3, data=dd, fun=table)

Это дает следующий результат:

 Descriptive Statistics  (N=20)

 +------+-------+
 |      |       |
 +------+-------+
 |Q1 : 1|25% (5)|
 +------+-------+
 |    2 |45% (9)|
 +------+-------+
 |    3 |30% (6)|
 +------+-------+
 |Q2 : 1|30% (6)|
 +------+-------+
 |    2 |35% (7)|
 +------+-------+
 |    3 |35% (7)|
 +------+-------+
 |Q3 : 1|35% (7)|
 +------+-------+
 |    2 |30% (6)|
 +------+-------+
 |    3 |35% (7)|
 +------+-------+

Возможные значения приведены в строках, потому что он имеет гибкость различных наборы значений для разных переменных. Вы можете поиграть с параметрами функции (например, method и fun ), чтобы получить другое направление.

7
ответ дан 6 December 2019 в 11:48
поделиться

Модификация предыдущего примера

library(Hmisc)
library(plyr)
dd <- data.frame(q1=sample(1:3, 20, replace=T),
 q2=sample(1:3, 20, replace=T), 
 q3=sample(1:3, 20, replace=T))  #fake data

cross <- ldply(describe(dd), function(x) x$values[1,])[-1]

rownames(cross) <- c("Q1. Likes it","Q2. Recommends it","Q3. Used it")
names(cross) <- c("1 (very Often)","2 (Rarely)","3 (Never)")

Теперь кросс выглядит так

> cross
                  1 (very Often) 2 (Rarely) 3 (Never)
Q1. Likes it                   4         10         6
Q2. Recommends it              7          9         4
Q3. Used it                    6          4        10
6
ответ дан 6 December 2019 в 11:48
поделиться

xtabs имеет интерфейс формулы, который может потребовать некоторой практики, чтобы привыкаешь, но это можно сделать. Если у вас есть данные в фрейме данных df и ваши переменные называются ques и или , вы можете использовать:

xtabs(~ques+resp,data=df)

Например:

> t1 <- rep(c("A","B","C"),5)
> t2 <- rpois(15,4)
> df <- data.frame(ques=t1,resp=t2)
> xtabs(~ques+resp,data=df)
     resp
names 2 3 4 5 6 7 9
    A 1 0 2 1 0 0 1
    B 1 0 0 2 1 1 0
    C 1 2 0 1 0 1 0
1
ответ дан 6 December 2019 в 11:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: