【发布时间】:2014-07-08 19:23:05
【问题描述】:
我正在尝试按 Year 和 CountyID 对数据进行分组,然后对子集数据使用 splinefun(三次样条插值)。我对想法持开放态度,但 splinefun 是必须的,不能更改。
这是我尝试使用的代码:
age <- seq(from = 0, by = 5, length.out = 18)
TOT_POP <- df %.%
group_by(unique(df$Year), unique(df$CountyID) %.%
splinefun(age, c(0, cumsum(df$TOT_POP)), method = "hyman")
这是我的数据示例 Year = 2010 : 2013, Agegrp = 1 : 17 并且 CountyIDs 等于美国的所有县。
CountyID Year Agegrp TOT_POP
1001 2010 1 3586
1001 2010 2 3952
1001 2010 3 4282
1001 2010 4 4136
1001 2010 5 3154
我正在做的是采用 Agegrp 1 : 17 并将分组拆分为 0 - 84 年。现在每个组代表 5 年。 splinefun 允许我这样做,同时为该过程提供一定程度的数学严谨性,即 splinefun 允许我提供美国每个县的每个年龄的人口总数。
最后,splinefun 代码本身可以工作,但在 group_by 函数中却不行,它会产生:
Error: wrong result size(4), expected 68 or 1.
我使用的 splinefun 代码是这样工作的
TOT_POP <- splinefun(age, c(0, cumsum(df$TOT_POP)),
method = "hyman")
TOT_POP = pmax(0, diff(TOT_POP(c(0:85))))
在一年内对一个 CountyID 进行了测试。我需要在“x”年和大约 3200 个县迭代这个过程。
【问题讨论】:
-
让我直说。您希望根据两个变量拆分数据框。然后,对于每个较小的数据帧,您想使用
splinefun得到样条函数映射age到TOT_POP?然后,您想使用该函数插入 0 到 85 岁之间所有年龄的总人口,因为您的原始数据只有 5、10、15、20 岁的人口......?也许您可以使用split和lapply或plyr来实现这一点,并让某些东西发挥作用,然后有人会更好地为您提供dplyr的帮助。 -
splinefun 将用于一个县和一年一次的 Aegrp 1 : 17 的数据子集。最终年龄组将是个人年龄 0 : 84。
-
我还是一头雾水。也许您可以更改
df数据框?将Agegrp替换为关联的age。例如,df$Agegrp = df$Agegrp*5。colnames(df)[3] = "age"。这可能会简化您的问题。
标签: r group-by spline dplyr cubic-spline