我有一个包含数十列和数千行的数据集。这里我只展示一个玩具示例:
trN <- c(0,0,0,0,1,1,1,1)
tt <- c(1,2,3,4,1,2,3,4)
varX <- c(1,5,NA,9,2,NA,8,4)
d <- as.data.frame(cbind(trN, tt, varX))
我要做的第一件事是将样条插值列作为每个列varX
的函数。从包中轻松完成的操作。tt
trN
ddply
plyr
ddply(d, .(trN), mutate, varXint = spline(tt, varX, xout = tt)$y)
但是假设我还想更改新数据框的维度(行数)。例如,我想要一组值指定插值发生的位置(xout
),其长度不同tt
。显然,下面的方法不起作用,因为mutate
新列需要与原始数据框的列具有相同的长度:
ddply(d, .(trN), mutate, varXint = spline(tt, varX, xout = seq(1, 4, by = 1.5))$y)
有没有人有合适的解决方案或任何建议?我希望有一个基于plyr
包的解决方案,因为我可以利用已实现的并行化。