1
我拥有数十列和数千行数据集。在这里,我提出只是一个玩具例子:更改R中数据帧的尺寸
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
功能的第一件事情。 plyr
包中的ddply
可轻松完成此操作。
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
包的解决方案,因为我可以利用实现的并行化。
谢谢。因为在我想知道是否可以在'varXint'之前定义'xout'并在样条函数中使用它之前,我从来没有使用'data.table'。我在问,因为我的'xout'变量将被用在十几个样条插值中,并且一遍又一遍地重新计算它没有什么意义。 – VLC
@VLC你可以在'[.data.table'的第二个参数中使用完整表达式,所以你可以这样做:'dt [,{tmp = seq(1,4,0.5); some_computation(TMP); list(varXint = spline(...,xout = tmp),xout = tmp)},by = trN]' – eddi
完美。再次感谢。 – VLC