滞后/引导R中的整个数据帧

时间:2018-03-22 19:53:17

标签: r dataframe lag lead

我很难领导或落后整个数据帧。我能做的是通过以下尝试来移动单个列,但不是整个事情:

    [suser(name='person1', terminal='pts/0', host='XX.XXX.XXX.XXX', started=1521547648.0),
 suser(name='person2', terminal='pts/3', host='XX.XXX.XXX.XXX', started=1521625856.0),
 suser(name='person3', terminal='pts/6', host='XX.XXX.XXX.XXX', started=1521737728.0),
 suser(name='person4', terminal='pts/7', host='XX.XXX.XXX.XXX', started=1521742080.0),
 suser(name='person5', terminal='pts/1', host='XX.XXX.XXX.XXX', started=1521729920.0),
 suser(name='person6', terminal='pts/8', host='XX.XXX.XXX.XXX', started=1521721472.0),
 suser(name='person7', terminal='pts/11', host='XX.XXX.XXX.XXX', started=1521721472.0),
 suser(name='person8', terminal='pts/14', host='XX.XXX.XXX.XXX', started=1521550208.0),
 suser(name='person9', terminal='pts/18', host='XX.XXX.XXX.XXX', started=1521731328.0),
 suser(name='person10', terminal='pts/22', host='XX.XXX.XXX.XXX', started=1521730688.0)]

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

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

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

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

 df_l<- dplyr::lag(df)

3 个答案:

答案 0 :(得分:3)

使用dplyr::mutate_all将滞后或潜在客户应用于所有列。

df = data.frame(a = 1:10, b = 21:30)
dplyr::mutate_all(df, funs(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

答案 1 :(得分:3)

我没有看到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

同样领导所有专栏。

答案 2 :(得分:1)

还有更多选择

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)