我想将data.table包中的shift函数应用于包含3列的数据表。这就是我到目前为止所拥有的。
## Data table with 3 columns
df <- data.frame(X1 = c(0,0,1000,800,600,400,200), X2 = c(0,0,0,0,800,400,200), X3 = c(0,0,0,0,0,500,200))
#X1 X2 X3
#1 0 0 0
#2 0 0 0
#3 1000 0 0
#4 800 0 0
#5 600 800 0
#6 400 400 500
#7 200 200 200
第一步是在每列中找到第一个非零数据(引导偏移)并将其存储在数据帧中,以便在shift函数的“n”参数中使用。我使用了以下代码;
num <- as.numeric(apply(df, 2, function(x) head(which(x!=0),1)))
我将上述函数的值附加到dt表的最后一行
df <- rbind(df, num)
目标是根据每列不同的前导偏移对所有列运行shift函数,如原始表中所示(即nX1 = 3,nX2 = 5,nX3 = 6)。我用以下代码尝试了这个;
apply(df, 2, function(x, n) shift(x, n=n, fill=0, type="lead"), n = as.numeric(x[8, ]))
上述函数将所有偏移值应用于所有列,而不是每列一个引导偏移。所需的表应如下所示;
# X1 X2 X3
#1 1000 800 500
#2 800 400 200
#3 600 200 0
#4 400 0 0
#5 200 0 0
#6 0 0 0
#7 0 0 0
感谢我在修复代码方面提供的任何帮助。 谢谢。