2

複数のカテゴリの要約列を作成するための非常に便利なソリューションに従っています。リンクされたソリューションで説明したように、各サブグループのパーセンテージ列を生成するコードを使用しています。

リンクされたソリューションからの関連サンプル コード:

mtcars %>%
  group_by (am, gear) %>%
  summarise (n=n()) %>%
  mutate(rel.freq = paste0(round(100 * n/sum(n), 0), "%"))

コードは目的の値を生成します。

## Source: local data frame [4 x 4]
## Groups: am
## 
##   am gear  n rel.freq
## 1  0    3 15      79%
## 2  0    4  4      21%
## 3  1    4  8      62%
## 4  1    5  5      38%

問題

このコードを変更して、呼び出しで渡された 2 番目のカテゴリで使用可能な一意のカテゴリに関連する列を動的に作成したいと考えていdplyrます。これはgear、添付の例の場合です。したがって、添付の例の場合、結果のデータ フレームは次のようになります。

   am gear  n rel.freq_gear3 rel.freq_gear4  rel.freq_gear5
 1  0    3 15      79%            21%
 2  1    4  8      0              62%            38%

試み

少数のカテゴリについては、ここでconditionally説明したように、指定された条件に対してのみステートメントを実行しようとするの値の要約を利用できると思います。ただし、このアプローチは、複数のカテゴリを扱う場合には非効率的です。ループを使用して目的のカテゴリの一意の値をジャンプすることで、外部のソリューションを開発できますが、私の望みは でこれを行うことです。dplyrsumBfoo = sum(B[A=="foo"]))dplyrdplyr

サンプルテーブル

大まかに言えば、次のようなテーブルを作成したいと思います。

 library(gmodels)
 CrossTable(mtcars$am, mtcars$gear)


   Cell Contents
|-------------------------|
|                       N |
| Chi-square contribution |
|           N / Row Total |
|           N / Col Total |
|         N / Table Total |
|-------------------------|


Total Observations in Table:  32 


             | mtcars$gear 
   mtcars$am |         3 |         4 |         5 | Row Total | 
-------------|-----------|-----------|-----------|-----------|
           0 |        15 |         4 |         0 |        19 | 
             |     4.169 |     1.371 |     2.969 |           | 
             |     0.789 |     0.211 |     0.000 |     0.594 | 
             |     1.000 |     0.333 |     0.000 |           | 
             |     0.469 |     0.125 |     0.000 |           | 
-------------|-----------|-----------|-----------|-----------|
           1 |         0 |         8 |         5 |        13 | 
             |     6.094 |     2.003 |     4.339 |           | 
             |     0.000 |     0.615 |     0.385 |     0.406 | 
             |     0.000 |     0.667 |     1.000 |           | 
             |     0.000 |     0.250 |     0.156 |           | 
-------------|-----------|-----------|-----------|-----------|
Column Total |        15 |        12 |         5 |        32 | 
             |     0.469 |     0.375 |     0.156 |           | 
-------------|-----------|-----------|-----------|-----------|

しかし、カウントと合計やその他のガジェットのない行の比率だけに興味があります。

4

1 に答える 1

1

dplyr

によるコメントの作成@docendo discimus:

library(tidyr)
count(mtcars, am, gear) %>% 
  mutate(rel.freq = n/sum(n)) %>% 
  spread(gear, rel.freq) %>% 
  group_by(am) %>%
  summarize_each(funs(sum2 = sum(., na.rm = TRUE))) %>%
  mutate_each(funs(perc = paste0(round(100 * ., 0), "%")), -am, -n)

プロデュース:

Source: local data frame [2 x 5]

     am     n     3     4     5
  (dbl) (int) (chr) (chr) (chr)
1     0    19   79%   21%    0%
2     1    13    0%   62%   38%

base

prop.table(table(mtcars$am, mtcars$gear), 1) %>% 
  round(2) %>% 
  '*'(100)

プロデュース:

   3  4  5
0 79 21  0
1  0 62 38
于 2015-11-30T14:06:56.617 に答える