【问题标题】:Percentage of factor levels by group in R [duplicate]R中按组划分的因子水平百分比[重复]
【发布时间】:2020-07-17 11:42:17
【问题描述】:

我正在尝试计算组内某个因素的不同水平的百分比。

我有嵌套数据,想查看每个国家/地区的学校百分比是私立学校(2 个级别的因素)。

但是,我不知道该怎么做。

# my data:
CNT <- c("A", "A", "A", "A", "A", "B", "B", "B", "C", "C", "C", "C", "C", "C", "D", "D",  
"D", "D", "D", "D")
SCHOOL <- c(1:5, 1:3, 1:6, 1:6)
FACTOR <- as.factor(c(1,2,1,2,1,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1))
mydata <- data.frame(CNT, SCHOOL, FACTOR)
head(mydata)

我想要一个列,其中包含每个国家/地区内一个因子级别(假设为 1)的百分比。

【问题讨论】:

  • 我认为您也可以参考上一篇文章,以获得使用 dplyr Relative frequencies / proportions with dplyr 计算分组 df 中的相对频率的更一般的答案。
  • 另一种方式:mydata %&gt;% count(CNT, FACTOR) %&gt;% group_by(CNT) %&gt;% mutate(n = n/sum(n))

标签: r dplyr aggregate data-wrangling


【解决方案1】:

另一种解决方案(使用 base-R):

prop.table(table(mydata$CNT, mydata$FACTOR), margin = 1)
            1         2
  A 0.6000000 0.4000000
  B 0.6666667 0.3333333
  C 0.5000000 0.5000000
  D 1.0000000 0.0000000

【讨论】:

    【解决方案2】:

    只需将您的数据按CNT 分组,然后汇总这些组以计算您拥有的FACTOR == 1 实例数与该组内的观察总数 (n())。

    library(dplyr)
    
    mydata %>%
      group_by(CNT) %>%
      summarise(
        priv_perc = sum(FACTOR == 1, na.rm=T) / n()
      )
    

    【讨论】:

    • 这适用于我的示例,但在我的数据集上出现严重错误 n() 只能在 dplyr 动词中使用。还有一些我不明白的回溯
    • 这意味着您不能在dplyr 函数之外使用n(),例如mutatesummarise。由于您将问题标记为dplyr,因此我希望您可以很好地处理您的数据 dplyr 风格:)
    • 我通常是,但我不是什么都懂,我只是边走边学,以前从未遇到过这个问题。谢谢你的解释!
    猜你喜欢
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多