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