按组获取条件百分比

时间:2021-03-16 15:12:55

标签: r

我刚开始使用 R,遇到了一个问题。

我有一个格式如下的数据集:

<头>
ID 重量 性别 类别
1 40 1 2
2 50 2 1

我想得到的是一个按类别分类的表格:

<头>
类别 1 类别 2
权重平均值 66.00 99.00
女性百分比 15.00 22.00

任何想法如何获得它?我正在尝试使用 data.table,但在我尝试对其进行分组后,两个类别的 % 保持不变。

dt[,list("mean weight"=mean(weight), "% of females" = setDT( DATASET)[ , 100 * nrow( DATASET[sex==1]) / nrow(DATASET)  ]), by=c("category")]

2 个答案:

答案 0 :(得分:0)

tidyverse 中的 group_by()summarise() 函数是一种非常强大的数据汇总方法。

library(tidyverse)    
group_by(df,Category) %>%
   summarise("Mean of weight" = mean(Weight),
             "% of females" = round(100*sum(Sex==2)/n(),digits=2))

请注意,生成的表格与您描述的表格相比是转置的。

在探索性数据分析中,我也使用包 table1。给你一个漂亮的 HTML 表格。

library(table1)
table1(~Weight+(Sex==2)|Category,data=df)

以下是有关 table1 包的更多信息:https://cran.r-project.org/web/packages/table1/vignettes/table1-examples.html

答案 1 :(得分:0)

<tbody> <tr> <td style="width: 12%; padding: 0px;" class="hide_on_mobile">&nbsp;</td> <td style="width: 66.1667%; text-align: center; padding: 0px 10px 15px;" class="adonmobile2"> <ul> <li style="color: #090a0a; margin: 10px; padding: 0px; font-family: Avenir, Arial, san-serif; line-height: 150%; text-align: left;"><span class="font" style="color: #000000; font-size: 18px;">Premium-grade stainless-steel interiors</span></li> <li style="color: #090a0a; margin: 10px; padding: 0px; font-family: Avenir, Arial, san-serif; line-height: 150%; text-align: left;"><span class="font" style="color: #000000; font-size: 18px;">WiFi-enabled capabilities across the entire collection</span></li> <li style="color: #090a0a; margin: 10px; padding: 0px; font-family: Avenir, Arial, san-serif; line-height: 150%; text-align: left;"><span class="font" style="color: #000000; font-size: 18px;">Award-winning theater-style lighting</span></li> <li style="color: #090a0a; margin: 10px; padding: 0px; font-family: Avenir, Arial, san-serif; line-height: 150%; text-align: left;"><span class="font" style="color: #000000; font-size: 18px;">Thermador exclusive Diamond Ice</span></li> <li style="color: #090a0a; margin: 10px; padding: 0px; font-family: Avenir, Arial, san-serif; line-height: 150%; text-align: left;"><span class="font" style="color: #000000; font-size: 18px;">Intuitive Push-to-Open doors</span></li> </ul> </td> <td style="width: 18.8333%; padding: 0px;" class="hide_on_mobile">&nbsp;</td> </tr> </tbody> 在这里很有帮助:

dplyr

输出:

dat<-data.frame(Weight=c(40,50,60,40,30,50),    Sex=factor(c(1,2,2,1,1,2)), Category=as.factor(c(2,1,2,1,2,1)))

library(dplyr)

Table<-dat %>% dplyr::group_by(Category) %>% dplyr::summarise(
  Mean.of.Weight=mean(Weight),
  Perc.Female=length(which(Sex==1))/length(Sex)
)

Table

如果要转置:

  Category Mean.of.Weight Perc.Female
  <fct>             <dbl>       <dbl>
1 1                  46.7       0.333
2 2                  43.3       0.667