计算r中的滞后或主导均值

时间:2015-02-27 21:33:43

标签: r time-series

我需要计算表中两个连续值之间的滞后或超前平均值,然后将平均值输出到新列。我可以为这个操作编写一个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))

3 个答案:

答案 0 :(得分:2)

使用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

答案 1 :(得分:1)

dplyr还有一种方法:

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

在第一行中也有NA,如果需要,可以在之后修复。

答案 2 :(得分:0)

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