library(dplyr)
dat<-data.frame(x=c(rep("A",5),rep("B",5)),
y=c(1, 3, 5, 2, 2,2,6,5,3,1))
dat%>%
group_by(x)%>%
transmute(z=(lag(y)+y)/2)
结果
# A tibble: 10 x 2
# Groups: x [2]
x z
<fct> <dbl>
1 A NA
2 A 2
3 A 4
4 A 3.5
5 A 2
6 B NA
7 B 4
8 B 5.5
9 B 4
10 B 2