【问题标题】:Calculate proportion (percent) for each column of a dataset计算数据集每一列的比例(百分比)
【发布时间】:2020-03-11 16:07:10
【问题描述】:

我正在尝试计算数据集每一列中类别的比例(百分比)。

示例数据:

df <- data.frame(
    "Size" = c("Y","N","N","Y","Y"), 
    "Type" =  c("N","N","N","Y","N"), 
    "Age" = c("N","Y","N","Y","N"), 
    "Sex"=c("N","N","N","N","N")
  )

df

数据生成如下表格:

    Size Type Age Sex
1    Y    N   N   N
2    N    N   Y   N
3    N    N   N   N
4    Y    Y   Y   N
5    Y    N   N   N

我已经尝试使用 prop.table 来计算一个类别的比例:

prop.table(table(df$Size))

这可行,但只计算一列的 Y 或 N 个答案的百分比。这个数据集非常大,所以我想一次计算每个类别的比例。

我的目标是制作一个表格,显示每列“是”答案的比例。

像这样:

       Proportion Y
Size    0.60
Type    0.20
Age     0.40
Sex     0.00

我对 R 比较陌生,因此我们将不胜感激!

【问题讨论】:

    标签: r group-by dplyr


    【解决方案1】:

    dplyr 方法:

    library(dplyr)
    df %>% summarise_all(~mean(.=="Y"))
    

    如果您有多个组:

    df1 = data.frame(class="A",df)
    df2 = data.frame(class="B",df)
    #make df2 different
    df2$Size<- rep("Y",5)
    newdf = rbind(df1,df2)
    newdf %>% group_by(class) %>% summarise_all(~mean(.=="Y"))
    

    【讨论】:

    • 这行得通!有没有办法让输出像上面的表格而不是文本行?
    • 这是一个data.frame,我的意思是你可以存储它的结果% summarise_all(~mean(.=="Y"))
    • 你的意思是:t(df %>% summarise_all(~mean(.=="Y")))
    • 是的,在前面加上 t 可以方便导出,谢谢!
    • 说我也想按组总结。前任。我有 A 组和 B 组,它们都有大小、类型、年龄和性别的 Y 和 N 数据。有没有办法只为 A 组获得 Y 的比例?谢谢!
    【解决方案2】:

    基础 R 中的一种方法是在逻辑向量上按列使用 apply

    apply(df == "Y", 2, mean)
    
    #Size Type  Age  Sex 
    # 0.6  0.2  0.4  0.0 
    

    colSums 的简单版本。

    colMeans(df == "Y")
    

    【讨论】:

      猜你喜欢
      • 2021-03-16
      • 2022-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 1970-01-01
      • 2013-12-27
      相关资源
      最近更新 更多