让我说我有一个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
答案 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