r - R中的条件统计(首选dplyr解决方案)
问题描述
我有以下数据框:
df <- data.frame("num1" = 1:3, "num2" = 4:6, "num3" = c(NA, 10, 12), stringsAsFactors = FALSE)
num1 num2 num3
1 4 NA
2 5 10
3 6 12
有没有办法有条件地使用每列的平均值生成汇总表?详细地说,如果数据框中的一列包含空值,则na.exclude
该空值并计算平均值:(10 + 12) /2 = 11。如果一列没有任何空值,则只需计算平均值:例如(1 + 2 + 3) / 3 = 2num1
列。
期望的输出:
mean_num1 mean_num2 mean_num3
2 5 11
解决方案
您可以使用“应用”函数、mean() 函数和“na.rm=TRUE”参数遍历所有列。
就像是
sapply(df, mean, na.rm=TRUE)
num1 num2 num3
2 5 11
然后你可以随意重命名向量:
names(mean_col)<-paste0('mean_', names(mean_col))
mean_num1 mean_num2 mean_num3
2 5 11
使用 dplyr:
df%>%summarize(across(everything(), mean, na.rm=TRUE, .names = "mean_{col}"))
编辑
或者最简单的,使用colMeans()
:
colMeans(df, na.rm=TRUE)
推荐阅读
- django - django runserver 错误“安全连接失败连接到 192.168.99.100:8000 期间发生错误。PR_END_OF_FILE_ERROR”
- sql - 将整数转换为日期
- sql - 计算回收期
- r - 如何绘制两个变量在时间范围内的演变?添加两个变量的年中值理想点
- c - Candy Crush 风格分配
- c# - 如何在 wpf 页面中显示视频
- amazon-web-services - 如何为两种 CloudFront 行为使用不同的错误配置?
- excel - 使用 VBA 打开受密码保护的文件
- c# - 如何检查另一个应用程序实例是否正在使用相同的资源运行
- java - 如何在 AWS 上运行 Angular/Spring Boot 应用程序?