使用dplyr

时间:2015-11-18 08:35:42

标签: r dplyr

我一直在使用这个来获得两组每个班级的计数比例但是没有得到正确的结果。

必须是每个密度内vegclas的比例,而不是总数的总比例。

veg %>%
  group_by(density,vegclas) %>%
  summarise(total.count=n(),
                 avg=total.count/count(veg)*100)

结果:

Source: local data frame [12 x 4]
Groups: density [?]

   density vegclas total.count      avg
    (fctr)  (fctr)       (int)    (chr)
1        H       1        1201 <dbl[1]>
2        H       2        1258 <dbl[1]>
3        H       3         162 <dbl[1]>
4        H       4        4745 <dbl[1]>
5        H       5        2807 <dbl[1]>
6        H       6         114 <dbl[1]>
7        L       1        1109 <dbl[1]>
8        L       2         469 <dbl[1]>
9        L       3          56 <dbl[1]>
10       L       4        1701 <dbl[1]>
11       L       5         691 <dbl[1]>
12       L       6         204 <dbl[1]>

编辑:

使用长度(veg)给了我这个:

   density vegclas total.count      avg
    (fctr)  (fctr)       (int)    (dbl)
1        H       1        1201  7506.25
2        H       2        1258  7862.50
3        H       3         162  1012.50
4        H       4        4745 29656.25
5        H       5        2807 17543.75
6        H       6         114   712.50
7        L       1        1109  6931.25
8        L       2         469  2931.25
9        L       3          56   350.00
10       L       4        1701 10631.25
11       L       5         691  4318.75
12       L       6         204  1275.00

1 个答案:

答案 0 :(得分:0)

由于缺少reproducible example,我使用mtcars数据集。要获得cyl(在您的案例中为vegclas)的每个级别geardensity)的每个级别的百分比,您可以执行以下操作:

mtcars %>% 
  group_by(gear) %>% 
    mutate(
       n.gear=n()
    ) %>%
  group_by(gear, cyl) %>% 
    summarise(
       n = n(),
       percent = n / unique(n.gear) * 100
    )

请注意,每个等级的百分比加起来为100。

   gear   cyl     n   percent
  (dbl) (dbl) (int)     (dbl)
1     3     4     1  6.666667
2     3     6     2 13.333333
3     3     8    12 80.000000
4     4     4     8 66.666667
5     4     6     4 33.333333
6     5     4     2 40.000000
7     5     6     1 20.000000
8     5     8     2 40.000000