0

我很难领先或落后于整个数据框。我能做的是通过以下尝试而不是全部来移动各个列:

require('DataCombine')
df_l <- slide(df, Var = var1, slideBy = -1)

使用 colnames(x_ret_mon) 作为 Var 不起作用,我被告知在数据框中找不到变量名称。

此尝试将列向右移动但不向下移动:

 df_l<- dplyr::lag(df)

这只会为滞后变量创建新变量,但我不知道如何有效地删除旧的非滞后值:

 df_l<-shift(df, n=1L, fill=NA, type=c("lead"), give.names=FALSE)
4

3 回答 3

6

用于dplyr::mutate_all将滞后或领先应用于所有列。

df = data.frame(a = 1:10, b = 21:30)
dplyr::mutate_all(df, lag)
    a  b
1  NA NA
2   1 21
3   2 22
4   3 23
5   4 24
6   5 25
7   6 26
8   7 27
9   8 28
10  9 29
于 2018-03-22T19:57:52.717 回答
3

我看不出滞后 a 中的所有列的意义data.frame。那不只是对应于您rbindNA原始行data.frame(减去最后一行)吗?

df = data.frame(a = 1:10, b = 21:30)
rbind(NA, df[-nrow(df), ]);
#    a  b
#1  NA NA
#2   1 21
#3   2 22
#4   3 23
#5   4 24
#6   5 25
#7   6 26
#8   7 27
#9   8 28
#10  9 29

同样地,领导所有列。

于 2018-03-22T20:04:13.030 回答
2

还有几个选择

data.frame(lapply(df, lag))

require(purrr)
map_df(df, lag)

如果你的数据是data.table你可以做的

require(data.table)
as.data.table(shift(df))

或者,如果您要覆盖df

df[] <- lapply(df, lag) # Thanks Moody
require(magrittr)
df %<>% map_df(lag)
于 2018-03-22T20:44:28.533 回答