0
參考:https://stackoverflow.com/a/28056113/3942806如何停止覆蓋滯後列?
我使用上面的鏈接代碼創建兩列的滯後值。
n<-4
odd2<-setDT(odd)[, paste("OBS_Q", 1:n) := shift(OBS_Q, 1:n)]
odd2<-setDT(odd)[, paste("sac", 1:n) := shift(sac, 1:n)]
This works great!我得到18列。
但爲了方便起見,我試圖將其轉換成一個功能:
masterlag<-function(df,col,n){
setDT(df)[, paste(col,sep='_',1:n) := shift(df[[col]], 1:n)]
}
odd3<-masterlag(df=odd,col="OBS_Q",n=4)
odd3<-masterlag(df=odd,col="sac",n=4)
但在這種情況下,第一個(「OBS_Q」)的新創建的列越來越替換,當我使用的功能第二次('囊')。所以,我只剩下14列而不是18個。
任何指針爲什麼?
odd<-structure(list(DATE = 19630101:19630104, PRECIP = c(0, 0, 0,0),
OBS_Q = c(1.61, 1.48, 1.4, 1.33), swb = c(1.75, 1.73, 1.7,1.67),
gr4j = c(1.9, 1.77, 1.67, 1.58), isba = c(0.83, 0.83,0.83, 0.83),
noah = c(1.31, 1.19, 1.24, 1.31), sac = c(1.99,1.8, 1.66, 1.57),
swap = c(1.1, 1.05, 1.08, 0.99), vic.mm.day. = c(2.1,1.75, 1.55, 1.43)),
.Names = c("DATE", "PRECIP", "OBS_Q", "swb","gr4j", "isba", "noah", "sac", "swap", "vic.mm.day."),
class = c("data.table","data.frame"), row.names = c(NA, -4L))
我想你傳遞'odd3'即第二碼。 'masterlag(df = odd3,col =「sac」,n = 4)[]' – akrun 2015-01-21 06:13:59
Ofcourse。愚蠢的我!非常感謝。 – maximusdooku 2015-01-21 06:16:01
我猜這個函數中的'setDT'不會改變原來的'odd'數據集,也就是'masterlag(df = odd,col =「OBS_Q」,n = 4)'如果你檢查'odd',它會是一樣的。 – akrun 2015-01-21 06:19:07