繁体   English   中英

如何在R中的所有行中获取每列的百分比值

[英]How to get percentage value of each column across all rows in 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。 任何想法如何解决这一问题?

如评论中提到的na.rm = TRUE ,在rowSums调用中需要一个na.rm = TRUE 要获得制造商中每种型号的百分比,您需要首先计算按制造商和型号分组的每种型号的数量,然后获得仅按制造商分组的百分比。 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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM