1
以下代碼使用10 x 2矩陣,Index和Price爲列。然後它將變量Price轉換m次,並用移位的變量創建一個10 x m的矩陣。最後,它將該矩陣附加到原始數據幀。這是我在大型數據庫上運行的模板。如果可能的話,我希望找到for循環的另一種方法來提高代碼的性能/速度。替代for循環創建移位行的矩陣
#Data
df <- data.frame(
Index = c(1:10),
Price = c(1221, 1220, 1220, 1217, 1216, 1218 , 1216, 1216, 1217, 1220))
#Define rowShift function
rowShift <- function(x, shiftLen = 1L) {
r <- (1L + shiftLen):(length(x) + shiftLen)
r[r<1] <- NA
return(x[r]) }
#Pre-allocate variables/matrix for shifted rows
n <- NROW(df$Price)
m <- 5 #how many rows to shift
FwdMatrix <- matrix(nrow = n, ncol = m)
dimnames(FwdMatrix) <- list(rownames(FwdMatrix, do.NULL = FALSE, prefix = ""),colnames(FwdMatrix, do.NULL = FALSE, prefix = "Fwd"))
#Loop to create shifted rows variables
for(i in 1:m) { FwdMatrix[,i ] <- rowShift(df$Price,-i) }
Index <- df$Index
FwdMatrixBis <- cbind(FwdMatrix, Index)
FwdDF <- data.frame(FwdMatrixBis)
df2 <- merge(df, FwdDF, by = "Index", sort = FALSE)
類似'FwdMatrix < - 矩陣(不公開(data.table ::移(DF $價格,1L:5L))的NcoI = 5)'? – lukeA
地獄是!很棒,謝謝。想要將其作爲回覆,以便我可以檢查問題的答案? – Krug
另外,你知道是否有可能在代碼中輸入「m」而不是「5」作爲輸入嗎?嘗試時收到錯誤消息。 – Krug