目标
我希望在数据框中对组内进行插值。这样可以为数据框中的每个组提供任意数量的中间点。
最小工作示例
我有一个类似以下数据框:
OldDataFrame <- data.frame(ID = c(1,1,1,2,2,2),
time = c(1,2,3,1,2,3),
Var1 = c(-0.6 , 0.2, -0.8 , 1.6 , 0.3 , -0.8),
Var2 = c(0.5 , 0.7, 0.6 , -0.3 , 1.5 , 0.4) )
我想获取一个类似于以下功能的函数:
TimeInterpolateByGroup <- function(DataFrame,
GroupingVariable,
TimeVariable,
TimeInterval){
#Something Here
}
如果我不需要指定列,而是希望自动对每个数字列进行操作,就像plyr
中的numcolwise
一样,那就太方便了。
这样我就可以像这样应用它:
NewDataFrame = TimeInterpolateByGroup(DataFrame = OldDataFrame,
GroupingVariable = "ID",
TimeVariable = "time",
TimeInterval = 0.25)
将NewDataFrame获取为:
NewDataFrame = data.frame(ID = c( 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2 ),
time = c( 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3 ),
Var1 = c( -0.6, -0.4, -0.2, 0, 0.2, -0.05, -0.3, -0.55, -0.8, 1.6, 1.275, 0.95, 0.625, 0.3, 0.025, -0.25, -0.525, -0.8 ),
Var2 = c( 0.5, 0.55, 0.6, 0.65, 0.7, 0.675, 0.65, 0.625, 0.6, -0.3, 0.15, 0.6, 1.05, 1.5, 1.225, 0.95, 0.675, 0.4 ))
或者以图片的形式呈现:
相关问题并没有完全解决
- 使用类似于
plyr
的方法似乎是正确的方向,但是给出的示例令人困惑,并且不能具有任意数量的中间插值点。这对于动画应用程序(见下文)很重要,因为我不确定需要多少个中间时间点才能获得流畅的动画效果。
其他一些答案使用了时间序列的方法,但这将不允许按组进行分割。
我还考虑使用纵向数据包,但这似乎对于应该是一个简单问题而言过于复杂。
期望的应用
我想要一个Var1和Var2的x-y图,其中每个ID点在时间= 1时都表示为一个点。然后,我想使用animate
包来查看随着时间增加而移动的点。为了使此过程平滑,我需要所有中间时间点的坐标集。