我在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)),]
我只是不确定从何处去进一步缩小范围并计算百分比。
答案 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))
您不必过滤“总计”类别,但通常最好不要使用“总计”类别(最好有一个列)