使用滚动平均函数。这是一个基础 R 解决方案:
vec 是您的对象,len 是窗口大小,prtl 打印部分平均值。
rollmean <- function(vec, len, prtl = FALSE) {
if (len > length(vec)) {
stop(paste("Choose lower range,", len, ">", length(vec)))
}
else {
if (prtl == T) {
sapply(1:length(vec), function(i) {
if (i <= len) {
mean(vec[1:i])
}
else {
mean(vec[(i - (len - 1)):i])
}
})
}
else {
sapply(1:length(vec), function(i) {
if (i - (len - 1) > 0) {
mean(vec[(i - (len - 1)):i])
}
else {
NA
}
})
}
}
}
要获取数据,请像这样使用它:
dat
Year temp
1 1983 0.109
2 1984 0.091
3 1985 -0.100
...
mydat <- setNames( data.frame( paste( rollmean(dat$Year,5) - 2,
rollmean(dat$Year,5) + 2, sep="-" ),
rollmean(dat$temp,5) ), colnames(dat) )
mydat
Year temp
1 NA-NA NA
2 NA-NA NA
3 NA-NA NA
4 NA-NA NA
5 1983-1987 0.0160
6 1984-1988 0.0144
7 1985-1989 -0.0032
8 1986-1990 0.0066
9 1987-1991 -0.0256
10 1988-1992 0.0154
11 1989-1993 0.0134
12 1990-1994 0.0372
13 1991-1995 0.0676
14 1992-1996 0.1070
15 1993-1997 0.0952
绘制数据,例如作为条形图(使用geom_point( aes( Year, temp )) 作为散点图):
require(ggplot2)
ggplot( mydat ) + geom_bar( aes( Year, temp, fill=Year ), stat="identity" ) +
theme(axis.text = element_text(size = 6))
简单地使用mydat[!is.na(mydat[,2]),]省略NAs