计算 r 中的滞后或超前均值

Calculate a lag or lead mean in r

我需要计算 table 中两个连续值之间的滞后或超前均值,然后将均值输出到新列。我可以为这个操作写一个 for 循环,但我宁愿避免这种情况,这样代码更灵活。是否可以在 dplyr 和 tidyr 中执行此操作?下面是一个示例数据集和期望的结果。提前致谢。

DATA = data.frame(POO = c(2, 4, 6, 8, 10 , 20))

RESULTS  = data.frame(POO = c(2, 4, 6, 8, 10 , 20), YEY = c(0,3,5,7,9,15))

使用filter:

DATA$YEY <- filter(DATA$POO, c(1, 1)/2, sides = 1)
#  POO YEY
#1   2  NA
#2   4   3
#3   6   5
#4   8   7
#5  10   9
#6  20  15

然后您可以将 NA 替换为 0,但我不明白这背后的逻辑。

请注意,filter 不幸地被包 dplyr 屏蔽了。如果您已附加 dplyr,则可能需要使用 stats::filter

dplyr也有方法:

DATA %>%
    mutate(YEY = (POO + lag(POO)) / 2)

这在第一行也有 NA,如果需要,您可以稍后修复。

df1<-structure(list(POO = c(2, 4, 6, 8, 10, 20)), .Names = "POO", row.names = c(NA, 
-6L), class = "data.frame")   
library(dplyr)
libary(zoo) # for rollmean function
df1 %>%  # df1 is your data frame
mutate(TEY=rollmean(POO,2,fill=0,align="right"))
  POO TEY
1   2   0
2   4   3
3   6   5
4   8   7
5  10   9
6  20  15