R:在数据帧UP的单列中移位值

Ann*_*nne 13 r dataframe

使用这样的示例数据:

example=data.frame(x=c(1,2,3,4,5,6,7,8), y=c(1,2,3,4,5,6,7,8), z=c(1,2,3,4,5,6,7,8))
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

    x   y   z
1   1   1   1
2   2   2   2
3   3   3   3
4   4   4   4
5   5   5   5
6   6   6   6
7   7   7   7
8   8   8   8
Run Code Online (Sandbox Code Playgroud)

我想将z列中的所有值向上移动两行,而其余的数据帧保持不变.结果应如下所示:

    x   y   z
1   1   1   3
2   2   2   4
3   3   3   5
4   4   4   6
5   5   5   7
6   6   6   8
7   7   7   NA
8   8   8   NA
Run Code Online (Sandbox Code Playgroud)

我只找到了将列的值向下移动或移动整个数据帧的方法.

有任何想法吗?谢谢!

And*_*rie 12

您的问题简化为:

  • 删除n向量中的第一个元素
  • 填充结束时的nNA

您可以使用一个简单的功能:

shift <- function(x, n){
  c(x[-(seq(n))], rep(NA, n))
}

example$z <- shift(example$z, 2)
Run Code Online (Sandbox Code Playgroud)

结果:

example
  x y  z
1 1 1  3
2 2 2  4
3 3 3  5
4 4 4  6
5 5 5  7
6 6 6  8
7 7 7 NA
8 8 8 NA
Run Code Online (Sandbox Code Playgroud)

  • 或者`c(tail(x, -n), rep(NA, n))`。这个问题有重复的味道... (2认同)
  • 但是什么是data.table解决方案! (2认同)

Net*_*tle 9

example = tibble(x=c(1,2,3,4,5,6,7,8), 
                   y=c(1,2,3,4,5,6,7,8), 
                   z=c(1,2,3,4,5,6,7,8))

example %>% mutate_at(c("z"), funs(lead), n = 2 )

# A tibble: 8 x 3
      x     y     z
  <dbl> <dbl> <dbl>
1  1.00  1.00  3.00
2  2.00  2.00  4.00
3  3.00  3.00  5.00
4  4.00  4.00  6.00
5  5.00  5.00  7.00
6  6.00  6.00  8.00
7  7.00  7.00 NA   
8  8.00  8.00 NA  
Run Code Online (Sandbox Code Playgroud)