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类别。以下是cutkey。
快捷键:

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

因此,对于每个 cutkey 元素,我们将拥有类似于上述类型的表格。我希望每次都有保证金。

    < 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, dlply( plyr包) 和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 回答