在R中滞后的单列中移动值

在R中滞后的单列中移动值,r,dataframe,shift,R,Dataframe,Shift,我有以下建议: example=data.frame(Code=c(A1,A1,A1,A2,A2,A2,A2,A3,A3,A3,A3,A3), Week=c(1,2,3,1,2,3,4,1,2,3,4,5), Price=c(10,10,8,4,4,6,6,15,20,20,20,20)) DF看起来像这样: Code Week Price 1 A1 1 10 2 A1 2 10 3 A1

我有以下建议:

example=data.frame(Code=c(A1,A1,A1,A2,A2,A2,A2,A3,A3,A3,A3,A3), Week=c(1,2,3,1,2,3,4,1,2,3,4,5), Price=c(10,10,8,4,4,6,6,15,20,20,20,20))
DF看起来像这样:

        Code   Week   Price
    1    A1     1      10
    2    A1     2      10
    3    A1     3       8
    4    A2     1       4
    5    A2     2       4
    6    A2     3       6
    7    A2     4       6
    8    A3     1      15
    9    A3     2      20
   10    A3     3      20
   11    A3     4      20
   12    A3     5      20
      Code   Week   Price
  1    A1     1       8
  2    A1     2      NA
  3    A1     3      NA
  4    A2     1       6
  5    A2     2       6
  6    A2     3      NA
  7    A2     4      NA
  8    A3     1      20
  9    A3     2      20
 10    A3     3      20
 11    A3     4      NA
 12    A3     5      NA
我想将价格值向上移动两行,而不更改DF的其余部分,但价格不能移动到其他代码,类似于以下内容:

        Code   Week   Price
    1    A1     1      10
    2    A1     2      10
    3    A1     3       8
    4    A2     1       4
    5    A2     2       4
    6    A2     3       6
    7    A2     4       6
    8    A3     1      15
    9    A3     2      20
   10    A3     3      20
   11    A3     4      20
   12    A3     5      20
      Code   Week   Price
  1    A1     1       8
  2    A1     2      NA
  3    A1     3      NA
  4    A2     1       6
  5    A2     2       6
  6    A2     3      NA
  7    A2     4      NA
  8    A3     1      20
  9    A3     2      20
 10    A3     3      20
 11    A3     4      NA
 12    A3     5      NA
我已经看到了将列值向上移动的方法,但我真的不想将价格移动到另一个代码中


求你了,我想得到一些帮助。谢谢。

我们可以在
dplyr

library(dplyr)
df %>%  group_by(Code) %>%  mutate(Price = lead(Price, 2))

#  Code   Week Price
#  <fct> <int> <int>
# 1 A1      1     8
# 2 A1      2    NA
# 3 A1      3    NA
# 4 A2      1     6
# 5 A2      2     6
# 6 A2      3    NA
# 7 A2      4    NA
# 8 A3      1    20
# 9 A3      2    20
#10 A3      3    20
#11 A3      4    NA
#12 A3      5    NA
在base中没有现成的函数可以执行此操作,但我们可以使用
tail
和append
NA

df$Price <- with(df,ave(Price, Code, FUN = function(x) c(tail(x, -2), rep(NA, 2))))
df$价格