プライマリ・コンテンツに移動
Oracle® R Enterpriseユーザーズ・ガイド
リリース1.5.1
E88296-01
目次へ移動
目次
索引へ移動
索引

前
次

3.2.4 データのクロス集計

クロス集計は、値からなる2つの表の間の相互依存関係を見つける統計手法です。ore.crosstab関数は、ore.frameのクロス列分析を可能にします。この関数は、Rのtable関数の高性能なバリアントです。

ore.freqを使用して頻度分析を実行する前にore.crosstab関数を使用する必要があります。

ore.crosstab関数呼出しの結果が単一のクロス集計の場合、この関数によってore.frameオブジェクトが返されます。結果が複数のクロス集計の場合は、この関数はore.frameオブジェクトのリストを返します。

この関数の引数の詳細は、help(ore.crosstab)を呼び出してください。

ore.corrの例ではNARROWデータセットを使用します。詳細は、「サンプルのNARROWデータセットについて」を参照してください。

最も基本的な使用例は、例3-26に示すとおり、単一列頻度表を作成することです。

例3-26 単一列頻度表の作成

この例では、GENDERによってグループ化されたNARROW ore.frameをフィルタします。

ct <- ore.crosstab(~AGE, data=NARROW)
head(ct)
例3-26のリスト
R> ct <- ore.crosstab(~AGE, data=NARROW)
R> head(ct)
   AGE ORE$FREQ ORE$STRATA ORE$GROUP
17  17       14          1         1
18  18       16          1         1
19  19       30          1         1
20  20       23          1         1
21  21       22          1         1
22  22       39          1         1

例3-27 2つの列の分析

この例では、GENDERによってAGEを、CLASSによってAGEを分析します。

ct <- ore.crosstab(AGE~GENDER+CLASS, data=NARROW)
head(ct)
例3-27のリスト
R> ct <- ore.crosstab(AGE~GENDER+CLASS, data=NARROW)
R> head(ct)
$`AGE~GENDER`
     AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP
17|F  17      F        5          1         1
17|M  17      M        9          1         1
18|F  18      F        6          1         1
18|M  18      M        7          1         1
19|F  19      F       15          1         1
19|M  19      M       13          1         1
# The remaining output is not shown.

例3-28 行の重み付け

行を重み付けするには、この例に示すように、別の列に基づいたカウントを含めます。この例では、YRS_RESIDENCEの値を使用してAGEおよびGENDERの値に重み付けします。

ct <- ore.crosstab(AGE~GENDER*YRS_RESIDENCE, data=NARROW)
head(ct)
例3-28のリスト
R> ct <- ore.crosstab(AGE~GENDER*YRS_RESIDENCE, data=NARROW)
R> head(ct)
     AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP
17|F  17      F        1          1         1
17|M  17      M        8          1         1
18|F  18      F        4          1         1
18|M  18      M       10          1         1
19|F  19      F       15          1         1
19|M  19      M       17          1         1

例3-29 クロス集計データの順序付け

クロス集計表の行の順序付けには、次に示すようないくつかの方法があります。

  • 分析対象の列によるデフォルトまたはNAMEの順序付け

  • 頻度カウントによるFREQの順序付け

  • -NAMEまたは-FREQは、順序を逆転します

  • INTERNALは、順序付けをバイパスします

この例では、頻度カウントによって順序付けした後、頻度カウントで順序を逆にします。

ct <- ore.crosstab(AGE~GENDER|FREQ, data=NARROW)
head(ct)
ct <- ore.crosstab(AGE~GENDER|-FREQ, data=NARROW)
head(ct)
例3-29のリスト
R> ct <- ore.crosstab(AGE~GENDER|FREQ, data=NARROW)
R> head(ct)
     AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP
66|F  66      F        1          1         1
70|F  70      F        1          1         1
73|M  73      M        1          1         1
74|M  74      M        1          1         1
76|F  76      F        1          1         1
77|F  77      F        1          1         1

R> ct <- ore.crosstab(AGE~GENDER|-FREQ, data=NARROW)
R> head(ct)
     AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP
27|M  27      M       33          1         1
35|M  35      M       28          1         1
41|M  41      M       27          1         1
34|M  34      M       26          1         1
37|M  37      M       26          1         1
28|M  28      M       25          1         1

例3-30 3つ以上の列の分析

この例では、3つ以上の列の分析を示します。結果は、SQLのGROUPING SETS句の実行に似ています。

ct <- ore.crosstab(AGE+COUNTRY~GENDER, NARROW)
head(ct)
例3-30のリスト
R> ct <- ore.crosstab(AGE+COUNTRY~GENDER, NARROW)
R> head(ct)
$`AGE~GENDER`
     AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP
17|F  17      F        5          1         1
17|M  17      M        9          1         1
18|F  18      F        6          1         1
18|M  18      M        7          1         1
19|F  19      F       15          1         1
19|M  19      M       13          1         1
# The rest of the output is not shown.
$`COUNTRY~GENDER`
                             COUNTRY GENDER ORE$FREQ ORE$STRATA ORE$GROUP
Argentina|F                Argentina      F       14          1         1
Argentina|M                Argentina      M       28          1         1
Australia|M                Australia      M        1          1         1
# The rest of the output is not shown.

例3-31 列の範囲の指定

この例に示すように、すべての列の名前を入力するかわりに、列の範囲を指定できます。

names(NARROW)
# Because AGE, MARITAL_STATUS and COUNTRY are successive columns, 
# you can simply do the following:
ct <- ore.crosstab(AGE-COUNTRY~GENDER, NARROW)
# An equivalent invocation is the following:
ct <- ore.crosstab(AGE+MARITAL_STATUS+COUNTRY~GENDER, NARROW)
例3-31のリスト
R> names(NARROW)
[1] "ID"             "GENDER"         "AGE"            "MARITAL_STATUS"
[5] "COUNTRY"        "EDUCATION"      "OCCUPATION"     "YRS_RESIDENCE" 
[9] "CLASS"    
R> # Because AGE, MARITAL_STATUS and COUNTRY are successive columns, 
R> # you can simply do the following:
R> ct <- ore.crosstab(AGE-COUNTRY~GENDER, NARROW)
R> # An equivalent invocation is the following:
R> ct <- ore.crosstab(AGE+MARITAL_STATUS+COUNTRY~GENDER, NARROW)

例3-32 別の列の値ごとに1つのクロス集計表の作成

この例では、別の列COUNTRYの一意の値ごとに1つのクロス集計表(AGE、GENDER)を作成します。

ct <- ore.crosstab(~AGE/COUNTRY, data=NARROW)
head(ct)
例3-32のリスト
R> ct <- ore.crosstab(~AGE/COUNTRY, data=NARROW)
R> head(ct)
                            AGE ORE$FREQ ORE$STRATA ORE$GROUP
Argentina|17                 17        1          1         1
Brazil|17                    17        1          1         3
United States of America|17  17       12          1        19
United States of America|18  18       16          1        19
United States of America|19  19       30          1        19
United States of America|20  20       23          1        19

例3-33 2つの列の値のセットごとに1つのクロス集計表の作成

(COUNTRY、GENDER)の一意の組合せごとに1つの(AGE、EDUCATION)表を作成するこの例に示すように、クロス集計を複数の列に拡張できます。

ct <- ore.crosstab(AGE~EDUCATION/COUNTRY+GENDER, data=NARROW)
head(ct)
例3-33のリスト
R> ct <- ore.crosstab(AGE~EDUCATION/COUNTRY+GENDER, data=NARROW)
R> head(ct)
                                   AGE EDUCATION ORE$FREQ ORE$STRATA ORE$GROUP
United States of America|F|17|10th  17      10th        3          1        33
United States of America|M|17|10th  17      10th        5          1        34
United States of America|M|17|11th  17      11th        1          1        34
Argentina|M|17|HS-grad              17   HS-grad        1          1         2
United States of America|M|18|10th  18      10th        1          1        34
United States of America|F|18|11th  18      11th        2          1        33

例3-34 階層化によるクロス集計の拡張

前の例のすべてのクロス集計表は、この例に示すように、階層化で拡張できます。

ct <- ore.crosstab(AGE~GENDER^CLASS, data=NARROW) 
head(ct)
R> head(ct)
# The previous function invocation is the same as the following:
ct <- ore.crosstab(AGE~GENDER, NARROW, strata="CLASS")
例3-34のリスト
R> ct <- ore.crosstab(AGE~GENDER^CLASS, data=NARROW) 
R> head(ct)
R> head(ct)
       AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP
0|17|F  17      F        5          1         1
0|17|M  17      M        9          1         1
0|18|F  18      F        6          1         1
0|18|M  18      M        7          1         1
0|19|F  19      F       15          1         1
0|19|M  19      M       13          1         1
# The previous function invocation is the same as the following:
ct <- ore.crosstab(AGE~GENDER, NARROW, strata="CLASS")

例3-35 ビニングおよびその後のクロス集計

この例では、AGEによってカスタム・ビニングを実行した後、GENDERおよびビンのクロス集計を計算します。

NARROW$AGEBINS <- ifelse(NARROW$AGE<20, 1, ifelse(NARROW$AGE<30,2,
                  ifelse(NARROW$AGE<40,3,4)))
ore.crosstab(GENDER~AGEBINS, NARROW)
例3-35のリスト
R> NARROW$AGEBINS <- ifelse(NARROW$AGE<20, 1, ifelse(NARROW$AGE<30,2,
+                    ifelse(NARROW$AGE<40,3,4)))
R> ore.crosstab(GENDER~AGEBINS, NARROW)
    GENDER AGEBINS ORE$FREQ ORE$STRATA ORE$GROUP
F|1      F       1       26          1         1
F|2      F       2      108          1         1
F|3      F       3       86          1         1
F|4      F       4      164          1         1
M|1      M       1       29          1         1
M|2      M       2      177          1         1
M|3      M       3      230          1         1
M|4      M       4      381          1         1