计算 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
我需要计算 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