2

次のタイプのデータがあります。

 mydata <- data.frame (yvar = rnorm(200, 15, 5), xv1 = rep(1:5, each = 40),
   xv2 = rep(1:10, 20))

table(mydata$xv1, mydata$xv2)


    1 2 3 4 5 6 7 8 9 10
  1 4 4 4 4 4 4 4 4 4  4
  2 4 4 4 4 4 4 4 4 4  4
  3 4 4 4 4 4 4 4 4 4  4
  4 4 4 4 4 4 4 4 4 4  4
  5 4 4 4 4 4 4 4 4 4  4

yvarカテゴリでもう一度集計したい。以下カットキーです。
カットキー:

 < 10 - group 1
  10-12 - group 2
  12-16 - group 3
  >16 - group 4

したがって、各カットキー要素に上記のタイプのテーブルと同様のものを用意します。証拠金は毎回欲しいです。

    < 10 - group 1

  1 2 3 4 5 6 7 8 9 10
  1 4 4 4 4 4 4 4 4 4  4
  2 4 4 4 4 4 4 4 4 4  4
  3 4 4 4 4 4 4 4 4 4  4
  4 4 4 4 4 4 4 4 4 4  4
  5 4 4 4 4 4 4 4 4 4  4

   10-12 - group 2

 1 2 3 4 5 6 7 8 9 10
  1 4 4 4 4 4 4 4 4 4  4
  2 4 4 4 4 4 4 4 4 4  4
  3 4 4 4 4 4 4 4 4 4  4
  4 4 4 4 4 4 4 4 4 4  4
  5 4 4 4 4 4 4 4 4 4  4

など、すべてのグループについて

(数値は全然違います)

それを行う簡単な方法はありますか?

4

1 に答える 1

6

はい、cut( dlplyplyrパッケージ) とaddmargins:

mydata$yvar1 <- cut(mydata$yvar,breaks = c(-Inf,10,12,16,Inf))
> dlply(mydata,.(yvar1),function(x) addmargins(table(x$xv1,x$xv2)))
$`(-Inf,10]`

       1  2  3  4  5  6  7  8  9 10 Sum
  1    0  0  0  0  0  0  2  0  1  0   3
  2    1  1  0  1  0  0  0  0  2  0   5
  3    0  1  0  0  1  1  0  2  0  0   5
  4    0  0  2  0  1  1  0  1  0  0   5
  5    0  1  1  0  1  1  1  0  0  2   7
  Sum  1  3  3  1  3  3  3  3  3  2  25

$`(10,12]`

       1  2  3  4  6  7  8  9 10 Sum
  1    0  0  0  1  2  0  0  0  0   3
  2    0  0  1  0  0  1  0  0  1   3
  3    0  1  0  1  1  2  0  0  1   6
  4    0  1  0  0  0  0  0  0  0   1
  5    1  0  1  1  1  0  1  1  2   8
  Sum  1  2  2  3  4  3  1  1  4  21

$`(12,16]`

       1  2  3  4  5  6  7  8  9 10 Sum
  1    2  3  1  1  1  2  0  3  0  2  15
  2    0  1  0  1  3  3  2  0  0  1  11
  3    3  1  3  1  0  0  0  2  4  1  15
  4    3  2  1  2  2  0  1  1  4  1  17
  5    3  1  1  2  0  1  1  1  1  0  11
  Sum 11  8  6  7  6  6  4  7  9  5  69

$`(16, Inf]`

       1  2  3  4  5  6  7  8  9 10 Sum
  1    2  1  3  2  3  0  2  1  3  2  19
  2    3  2  3  2  1  1  1  4  2  2  21
  3    1  1  1  2  3  2  2  0  0  2  14
  4    1  1  1  2  1  3  3  2  0  3  17
  5    0  2  1  1  3  1  2  2  2  0  14
  Sum  7  7  9  9 11  7 10  9  7  9  85

attr(,"split_type")
[1] "data.frame"
attr(,"split_labels")
      yvar1
1 (-Inf,10]
2   (10,12]
3   (12,16]
4 (16, Inf]

breaks引数を調整して、cut必要な値を取得できます。(ただし、質問に表示される証拠金の合計は、証拠金の合計のようには見えません。)

于 2012-04-30T19:45:30.870 に答える