从R中的上一行获取值

时间:2017-02-22 12:56:11

标签: r

让我说我有一个df

ID <- c("A1","A1","A1", "A2","A2","A3", "A3", "A3")
b <- c(1,2 , 3, 1, 2, 1, 2, 3)
c <- c (100, 200, 300 ,400, 500 ,600 ,700, 800 )
df1 <- data.frame(ID,b,c)

所以df看起来像那样

     a b   c
   1 A1 1 100
   2 A1 2 200
   3 A1 3 300
   4 A2 1 400
   5 A2 2 500
   6 A3 1 600
   7 A3 2 700
   8 A3 3 800

我想将ID中的c值移动到新列的下一行

所以结果应该像

      a b   c  new
   1 A1 1 100  NA 
   2 A1 2 200  100
   3 A1 3 300  200 
   4 A2 1 400  NA
   5 A2 2 500  400
   6 A3 1 600  NA
   7 A3 2 700  600
   8 A3 3 800  700

1 个答案:

答案 0 :(得分:1)

我们可以使用tidyverse

library(tidyverse)
df1 %>%
   group_by(ID) %>%
   mutate(new = lag(c))
#     ID     b     c   new
#   <fctr> <dbl> <dbl> <dbl>
#1     A1     1   100    NA
#2     A1     2   200   100
#3     A1     3   300   200
#4     A2     1   400    NA
#5     A2     2   500   400
#6     A3     1   600    NA
#7     A3     2   700   600
#8     A3     3   800   700