R - 多行中的分裂行

时间:2014-07-03 18:59:17

标签: r

我的人口统计数据目前分为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

这五个新行现在将成为分成个别年份的年龄组。我稍后会对每个单独的年份应用适当的权重,但是现在我需要弄清楚如何根据上述标准将每一行拆分成一个新行。

我希望我能说清楚。

谢谢!

1 个答案:

答案 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), ]