将具有不同超前/滞后偏移的移位功能应用于r中的多个列

时间:2017-08-23 22:47:31

标签: r data.table apply plyr lapply

我想将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

感谢我在修复代码方面提供的任何帮助。  谢谢。

0 个答案:

没有答案