使用这样的示例数据:
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向量中的第一个元素n值NA您可以使用一个简单的功能:
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)
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)