【发布时间】:2019-03-14 15:47:28
【问题描述】:
使用 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。许多聚合函数(如sum、mean等)默认为NA(如果任何值为NA)作为故障保护 -
另外,请记住,从所有模型中创建列意味着您将拥有大量不适用于行的列。如果您想要的只是组内的比例,有更好的方法可以做到这一点,或者将数据保持长形,或者按制造商拆分。
标签: r dplyr percentage