r - 总结 r 中分组变量的比例
问题描述
我试图总结一个分组变量,但我想得到总和作为每个组中数字的比例。这是一个例子:
创建以下数据框:
dat <- data.frame(year = c(rep(1970, 4), rep(1980, 4), rep(1990, 4)),
country = rep(1:4, 3),
change = c(0.1, 0.1, 0.1, -0.1, NA, 0.1, 0.1, 0.1, NA, NA, 0.1, 0.1))
> dat
year country change
1 1970 1 0.1
2 1970 2 0.1
3 1970 3 0.1
4 1970 4 -0.1
5 1980 1 NA
6 1980 2 0.1
7 1980 3 0.1
8 1980 4 0.1
9 1990 1 NA
10 1990 2 NA
11 1990 3 0.1
12 1990 4 0.1
我可以计算出经历积极变化的国家数量:
dat %>%
mutate(change.true = ifelse(change > 0, 1, 0)) %>%
group_by(year) %>%
summarise(count.positive = sum(change.true))
# A tibble: 3 x 2
year count.positive
<dbl> <dbl>
1 1970 3
2 1980 3
3 1990 2
这表明出现积极变化的国家数量稳定或减少。然而,这是有数据的国家数量减少的结果(我知道我需要谨慎处理缺失的数据)。我想探讨的是有数据的国家的比例是如何变化的。基本上我想要这个:
data.frame(year = c(1970, 1980, 1990),
prop.positive = c(0.75, 1, 1))
year prop.positive
1 1970 0.75
2 1980 1.00
3 1990 1.00
如何修改汇总函数以便计算每个组的组大小?我很乐意用组大小改变另一列,然后计算比例,但不知道如何获得该组大小。不用说,我正在尝试为大量数据集执行此操作。
解决方案
我们可以通过使用na.rm
from mean
ie get the mean
of 逻辑表达式 ( change > 0
) 得到比例,同时去掉 `NA
library(dplyr)
dat %>%
group_by(year) %>%
summarise(prop.positive = mean(change > 0, na.rm = TRUE))
# A tibble: 3 x 2
# year prop.positive
# <dbl> <dbl>
#1 1970 0.75
#2 1980 1
#3 1990 1
如果缺少一些“国家”,那么我们可以complete
对数据集执行 a 以获取缺失值,然后执行group_by
summarise
library(tidyr)
dat %>%
complete(year, country) %>%
group_by(year) %>%
summarise(prop.positive = mean(change > 0, na.rm = TRUE))
在base R
中,我们可以做同样的事情aggregate
aggregate(cbind(prop.positive = change > 0) ~ year, dat,
mean, na.rm = TRUE, na.action = na.pass)
# year prop.positive
#1 1970 0.75
#2 1980 1.00
#3 1990 1.00
推荐阅读
- math - 八度音阶的无穷级数之和
- angular - 传递正文值 PATCH 调用
- .net-core - dotnet-ef 安装后还是找不到
- reactjs - 使用 React 和 Redux 创建步进器
- javascript - 电话号码格式 xx-xxxxxx 的 Javascript 函数
- php - 站点未从 Sql 加载帖子。它显示零帖子
- mysql - 为什么在级联更新中插入数据后我的子表 tblOefenen2 没有得到更新?
- c# - 如何建立多对一关系EF?
- install4j - install4j 是否支持智能卡 EV 代码签名证书
- javascript - Apollo Client - 当变量发生变化时,可以只重新获取较大查询的片段吗?