r - 在R中按组计算百分比
问题描述
我的数据集如下所示: 数据来自课程学生评价。这些列包括课程的分类数据,以及评分量规中各种标准的分数的数字数据。我正在尝试使用 R 来计算所有列的值等于或大于 3 的百分比。我想不出比手动更快的直接方法。谢谢费尔南多
解决方案
这些tidyverse
软件包非常适合此类任务。
library(tidyverse)
首先让我们创建一些虚拟数据。
df <- tibble(`1..Course` = rep(LETTERS[1:3], each=5),
col1 = sample(c(NA,1:5), 15, replace=TRUE),
col2 = sample(c(NA,1:5), 15, replace=TRUE),
col3 = sample(c(NA,1:5), 15, replace=TRUE))
现在,对于每一列,我们要查看哪些值 > 3:
df$col1 > 3
[1] FALSE NA TRUE NA FALSE NA NA FALSE NA FALSE FALSE TRUE FALSE NA FALSE
所以我们得到一个布尔值,如果我们尝试求和,它将自动转换为数字(0 和 1)。所以计算比例只是取平均值!
但是有缺失值,所以我们将明确地忽略它们:
mean(df$col1 > 3, na.rm = TRUE)
[1] 0.2222222
所以我们知道如何为一整列做这件事,现在我们可以使用 tidyverse 中的函数来做by
当然:
df %>%
group_by(`1..Course`) %>%
summarize(prop_col1 = mean(col1 > 3, na.rm = TRUE),
prop_col2 = mean(col2 > 3, na.rm = TRUE),
prop_col3 = mean(col3 > 3, na.rm = TRUE))
# A tibble: 3 x 4
# `1..Course` prop_col1 prop_col2 prop_col3
# <chr> <dbl> <dbl> <dbl>
#1 A 0.333 0.2 0.5
#2 B 0 0.75 0.2
#3 C 0.25 0 0.25
它已经完成了。
可能,您可能希望对每个条件都执行此操作,而无需键入它们。因此,您需要将标准类型视为变量,并将您的 data.frame 转换为长格式。然后适用相同的代码。
df %>%
pivot_longer(-`1..Course`, names_to="criterium") %>%
group_by(`1..Course`, criterium) %>%
summarize(prop_value = mean(value > 3, na.rm = TRUE))
推荐阅读
- node.js - 如何在 linux 中更新 NodeJS 版本?(尝试安装 jsreport-pdf-password 时出现问题)
- javascript - 为什么在运行迁移时出现错误,我试图将typedatas文本更改为JSONB(PosgreesSql+sequelize)
- blockchain - 将少量数据写入区块链?以及可用的区块链
- javascript - 如何使用 nodejs 服务器流式传输 RTSP?
- python - 将多个 Excel 工作簿中的多个工作表合并到一个 Pandas 数据框中
- python - 如何在 Python 中使用 for 循环或其他迭代方法连接“变量名”?
- amazon-web-services - 无论如何使用aws amplify CLI添加带有postgres数据源的graphql api吗?
- python - 如何使用python将列表列表写入excel?
- php - 将键值对数组保存到 MySQL-DB
- java - 直径堆栈重新启动时如何处理请求/应答/会话?