如何根据其他行计算百分比

时间:2019-04-21 22:02:45

标签: r

我在R中有一个带有四列的数据框。我想按州和年份来计算44岁以下公民的总百分比。

如何在R中完成此操作,并保留年和状态列?

我已经能够使用汇总来获取总和并保留更大数据集中的年份/州/年龄值。我只是无法获得整列的总和,但是现在我不确定从哪里可以计算百分比。

|------------||------------||------------||------------|
|    Year    ||    State   ||    Age     ||    Pop     |
|------------||------------||------------||------------|
|    2000    ||     VA     ||    <44     ||    150     |
|------------||------------||------------||------------|
|    2000    ||     VA     ||    44+     ||    350     |
|------------||------------||------------||------------|
|    2000    ||     VA     ||    Total   ||    500     |

理想的输出:

|------------||------------||------------||------------|
|    Year    ||    State   ||    Age     ||    Pop     |
|------------||------------||------------||------------|
|    2000    ||     VA     ||    <44     ||    0.3     |
|------------||------------||------------||------------|
|    2004    ||     VA     ||    <44     ||    0.2     |
|------------||------------||------------||------------|
|    2008    ||     VA     ||    <44     ||    0.4     |

这是我用来获取数据帧以查看其工作方式的最后代码。

demos_sub <- aggregate(demos_sub$total_citizen_pop, by=list(Year=demos_sub$year, State=demos_sub$state, Age=demos_sub$age), FUN=sum)
names(demos_sub) <- c("year","state", "age", "total_citizen_pop")
demos_sub <- demos_sub[with(demos_sub, order(year)),]
demos_sub <- demos_sub[with(demos_sub, order(state)),]

我只是不确定从何处去进一步缩小范围并计算百分比。

1 个答案:

答案 0 :(得分:0)

这是解决方案的开始

library(dplyr)

Year <- rep(2000, 6)
State <- c(rep("VA", 4), rep("MA", 2))
Age <- c("<44", "44+", "44+", "<44", "<44", "44+")
Pop <- c(150, 350, 500, 200, 100, 100)

df <- data.frame(State = State, Age = Age, Pop = Pop, Year= Year)

df %>% filter(Age != "Total") %>% group_by(Year, State)  %>% summarize(Pop44 = sum(Pop[Age=="<44"]) / sum(Pop))

您不必过滤“总计”类别,但通常最好不要使用“总计”类别(最好有一个列)