8

SPSS では、係数 (または値) をテーブルの見出しとして使用して、複数の変数を含むクロス集計を (比較的) 簡単に作成できます。ということで、以下のようなもの(でっち上げデータなど)。Q1、Q2、および Q3 には、それぞれの人に 1、2、または 3 のいずれかがあります。これらを数字のままにしましたが、要因である可能性があり、どちらも問題の解決には役立たないようです。

                        1(非常によくある) 2(めったにない) 3(まったくない)
   Q1. いいね 12 15 13
   Q2. おすすめします 22 11 10
   Q3. 使った 22 12 9

SPSS では、行、列、または合計パーセンテージを要求することさえできます。

table()、ftable()、xtab()、gmodels の CrossTable()、および descr の CrossTable() を試しましたが、これらのどれも (私の知る限り) 複数の変数を処理できません。ほとんどの場合、別の変数と交差する 1 つの変数を処理するように見え、3 番目はレイヤーを作成します。

これを理解するために使用できるいくつかの優れたクロスタブ/テーブルの例を含むパッケージはありますか? 単純な何かが欠けていると確信しているので、見逃したものを指摘していただきありがとうございます。おそらく、各行を個別のリストとして生成してから、データフレームを作成してデータフレームを印刷する必要がありますか?

更新: パッケージ catspec で ctab() を発見しました。これも正しい方向に進んでいます。R が SPSS の Ctables に一貫して相当するものを持たないことは興味深いことです。これは基本的に、調査研究に使用される古い集計ツールと同様の「タブ」ツールです。ctab() は試行中であり、見事な最初のステップです... しかし、それでもこのテーブル (上記) を作成することはできません。

4

7 に答える 7

7

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) をいじって、他の方向を取得できる場合があります。

于 2010-03-19T18:45:36.047 に答える
6

前の例の変更

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
于 2010-03-22T16:47:26.440 に答える
1

Hadley Wickham の reshape package を確認してください。castAFAIS、パッケージの機能が必要です。

于 2010-03-19T23:27:02.060 に答える
1

xtabsには、慣れるまでにある程度の練習が必要な数式インターフェイスがありますが、これは実行できます。データフレームにデータがdfあり、変数がquesand と呼ばれるresp場合は、次を使用できます。

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
于 2010-03-22T17:16:45.690 に答える
0

カスタム関数を使用rbind()して、次のような複数のテーブルで使用できます。

multitab <- function(...){
   tabs<-list(...)
   tablist<-lapply(tabs,table)
   bigtab<-t(sapply(tablist,rbind))
   bigtab } 
于 2010-03-19T20:41:14.970 に答える