r - 根据 2 列值合并行
问题描述
region. age. pop
SSC21184 0 209
SSC21184 1 195
SSC21184 2 242
SSC21184 3 248
SSC21185 0 231
SSC21185 1 287
SSC21185 2 268
SSC21185 3 257
我正在寻找:
- <2 和 >=2 的年龄组(第 2 列),
- 找到每个地区的这些年龄组的人口
所以它应该看起来像这样:
region. age_group. pop
SSC21184 <2 404
SSC21184 >=2 490
SSC21185 <2 518
SSC21185 >=2 524
我尝试使用tapply(df$pop, df$agegroup, FUN = mean) %>% as.data.frame()
,但是我继续收到错误:参数必须具有相同的长度
编辑:如果可能的话,我将如何绘制每个地区每个年龄组的人口?例如,堆积条形图?谢谢!
解决方案
如果您只有两个年龄段需要更改,我们可以使用ifelse
:
library(dplyr)
df %>%
group_by(region, age = ifelse(age >=2, '>=2', '<2')) %>%
summarise(sum = sum(pop))
# region age sum
# <chr> <fct> <int>
#1 SSC21184 < 2 404
#2 SSC21184 >=2 490
#3 SSC21185 < 2 518
#4 SSC21185 >=2 525
cut
如果您有大量的年龄组,则可以使用更通用的解决方案。
df %>%
group_by(region, age = cut(age, breaks = c(-Inf, 1, Inf),
labels = c('< 2', '>=2'))) %>%
summarise(sum = sum(pop))
我们也可以使用相同的逻辑tapply
。
with(df, tapply(pop, list(region, ifelse(age >=2, '>=2', '<2')), sum))
# <2 >=2
#SSC21184 404 490
#SSC21185 518 525
推荐阅读
- azure - 在 Azure 中通过 ARM 模板部署 Windows 和 Linux VM
- r - Plotly - 如何更改直方图颜色?
- python - 此代码如何工作以替换 Python 中前几行中的值
- devise - 使用 Devise 的 Ruby on Rails 两因素身份验证
- ubuntu - 禁用 nginx 后 GitLab 403 错误
- c# - 有什么方法可以将 google protobuf 消息转换为带有缩进的 json?
- php - PHP messenger bot 通用模板点击
- javascript - 使用自定义 d3 事件更新 Vue 触发器
- android - 无法解析“:app@debug/compileClasspath”的依赖关系
- java - 相同的tomcat JNDI错误下的2个子域