代码之家  ›  专栏  ›  技术社区  ›  aaaaa

在数据帧中将列上移或下移n行

  •  0
  • aaaaa  · 技术社区  · 7 年前

    df :

    set.seed(1)
    df = data.frame(a = rnorm(10), 
                    b = rnorm(10), 
                    c = rnorm(10), 
                    d = rnorm(10))
    
    > df
                a           b           c           d
    1  -0.6264538  1.51178117  0.91897737  1.35867955
    2   0.1836433  0.38984324  0.78213630 -0.10278773
    3  -0.8356286 -0.62124058  0.07456498  0.38767161
    4   1.5952808 -2.21469989 -1.98935170 -0.05380504
    5   0.3295078  1.12493092  0.61982575 -1.37705956
    6  -0.8204684 -0.04493361 -0.05612874 -0.41499456
    7   0.4874291 -0.01619026 -0.15579551 -0.39428995
    8   0.7383247  0.94383621 -1.47075238 -0.05931340
    9   0.5757814  0.82122120 -0.47815006  1.10002537
    10 -0.3053884  0.59390132  0.41794156  0.76317575
    

    我希望向上移动(仅)列 b c d 比如说3排。纵队 a 必须保持固定,并且行具有 NAs 远离的。

    这里是我想要的3行移位输出:

    > df_shift_3
                a           b           c           d
    1  -0.6264538 -2.21469989 -1.98935170 -0.05380504 
    2   0.1836433  1.12493092  0.61982575 -1.37705956
    3  -0.8356286 -0.04493361 -0.05612874 -0.41499456
    4   1.5952808 -0.01619026 -0.15579551 -0.39428995
    5   0.3295078  0.94383621 -1.47075238 -0.05931340
    6  -0.8204684  0.82122120 -0.47815006  1.10002537
    7   0.4874291  0.59390132  0.41794156  0.76317575 
    

    up down 移位 n 排?

    我尝试使用以下函数 https://rdrr.io/cran/useful/man/shift.column.html 但是没有成功。

    谢谢你的帮助

    1 回复  |  直到 7 年前
        1
  •  3
  •   MrFlick    7 年前

    这个 lead/lag 来自dplyr的函数对此很有帮助。 df %>% mutate_at(-1, ~lead(., 3)) %>% slice(1:(n()-3))

    shift_all_but_first <- function(data, N) data %>% mutate_at(-1, ~lead(., N)) %>% slice(1:(n()-N))
    
    shift_all_but_first(df, 3)