r - 如何在R中的所有行中获取每列的百分比值
问题描述
使用 R 的 tidyverse,我如何获得每列跨行的百分比值?以 mpg 数据集为例,我尝试了以下代码:
new_mpg <- mpg %>%
group_by(manufacturer, model) %>%
summarise (n = n()) %>%
spread(model, n) %>%
mutate_if(is.integer, as.numeric)
new_mpg[,-1] %>%
mutate(sum = rowSums(.))
我正在寻找创建以下输出:
manufacturer | 4runner4wd | a4 | a4 quattro | a6 quattro | altima |
--------------------------------------------------------------------------
audi | NA | 0.3888889 | 0.444444 | 0.166667 | NA |
但是,当我到达
new_mpg[,-1] %>%
mutate(sum = rowSums(.))
sum 列返回 NA。而且我无法计算 n()/sum。我只会得到NA。任何想法如何解决这一问题?
解决方案
正如@camille 在评论中提到的那样,您需要na.rm = TRUE
在rowSums
通话中使用。要获得制造商中每个型号的百分比,您需要首先计算按制造商和型号分组的每个型号的数量,然后获得仅按制造商分组的百分比。dplyr
这种方式很聪明,因为它在之后删除了一层分组,summarise
所以你只需要添加一个 mutate:
library(dplyr)
library(tidyr)
library(ggplot2)
new_mpg <- mpg %>%
group_by(manufacturer, model) %>%
summarise (n = n()) %>%
mutate(n = n/sum(n)) %>%
spread(model, n) %>%
mutate_if(is.integer, as.numeric)
new_mpg[,-1] %>%
mutate(sum = rowSums(., na.rm = TRUE))
推荐阅读
- sql - Azure DevOps SQL 数据库部署
- ms-access - 查询中表达式的扩展格式
- cmake - 旧 CMake 版本中导入库的接口编译选项
- amazon-web-services - 从指定的 S3 目录列表中检索内容
- kubernetes - Prometheus 作业“kubernetes-nodes”端点处于“未知”状态
- c++ - 检查程序是手动调用还是系统启动调用
- python - 如何为嵌套函数制作地图?
- python - 我应该如何构建 3D 数据以进行快速简单的搜索
- python - useradd 通过 ssh 到远程服务器 - 如何提升权限?sudo?
- javascript - 当我们不知道 Typescript 中的属性名称时,以编程方式推送到类型为 any 的数组