我的人口统计数据目前分为18个年龄组,每年间隔5年。我的第一步是获取这些数据并将其发展为1年。
以下是一小部分数据
CountyID Year Agegrp TOT_POP TOT_MALE TOT_FEMALE
1001 2000 1 3029 1503 1526
1001 2000 2 3619 1874 1745
1001 2000 3 3776 1976 1800
1001 2000 4 3297 1698 1599
1001 2000 5 2366 1193 1173
请注意,这是一个小样本,完整的数据集是849,870 X 30.
我想要做的是将每一行从TOT_POP右侧(其他行进一步详述人口数)除以5,同时创建5个新行。分成5个单独行后的第一行示例为:
CountyID Year Age TOT_POP TOT_MALE TOT_FEMALE
1001 2000 0 605.8 300.6 305.2
1001 2000 1 605.8 300.6 305.2
1001 2000 2 605.8 300.6 305.2
1001 2000 3 605.8 300.6 305.2
1001 2000 4 605.8 300.6 305.2
这五个新行现在将成为分成个别年份的年龄组。我稍后会对每个单独的年份应用适当的权重,但是现在我需要弄清楚如何根据上述标准将每一行拆分成一个新行。
我希望我能说清楚。
谢谢!
答案 0 :(得分:1)
执行此操作的最佳方法是使用索引。因此,如果您的数据框为d
,
d <- d[rep(1:nrow(d), each = 5), ] # repeat each row 5 times
d[c("TOT_POP", "TOT_MALE", "TOT_FEMALE")] <-
d[c("TOT_POP", "TOT_MALE", "TOT_FEMALE")] / 5 # divide the desired cols by 5
d$Agegrp <- rep(0:4, each = 5)
names(d)[which(names(d) == "Agegrp")] <- "Age"
确保在执行此操作之前正确排序数据,因为您可能最终会重新标记错误的年龄组,例如d <- d[order(d$CountyID, d$Year, d$Agegrp), ]
。