根据月平均值有条件地分离每日数据



我是r的新手,我有每日数据,并希望将平均值小于1的月份与其他数据分开。对每日数据(平均值大于1)做点什么。重要的是不要触摸月平均值小于1的日值。

我使用aggregate(file,as.yearmon,mean)来获得月平均值,但未能掌握如何使用它来过滤分析中特定月份的每日值。如有任何建议,我将不胜感激。

我使用它的一小部分和dput复制了数据:

structure(list(V1 = c(0, 0, 0, 0.43, 0.24, 0, 1.06, 0, 0, 0, 1.57, 1.26, 1.34, 0, 0, 0, 2.09, 0, 0, 0.24)), .Names = "V1", row.names = c(NA, 20L), class = "data.frame")

我正在使用的代码片段:

library(zoo)
file <- read.table("text.txt")
x_daily <- zooreg(file, start=as.Date("2000-01-01"))
x1_daily <- x_daily[]
con_daily <- subset(x1_daily, aggregate(x1_daily,as.yearmon,mean) > 1 ) 

让我们创建一些示例数据:

feb2012 <- data.frame(year=2012, month=2, day=1:28, data=rnorm(28))
feb2013 <- data.frame(year=2013, month=2, day=1:28, data=rnorm(28) + 10)
jul2012 <- data.frame(year=2012, month=7, day=1:31, data=rnorm(31) + 10)
jul2013 <- data.frame(year=2013, month=7, day=1:31, data=rnorm(31) + 10)
d <- rbind(feb2012, feb2013, jul2012, jul2013)

您可以按月获得data列的汇总,如下所示:

> a <- aggregate(d$data, list(year=d$year, month=d$month), mean)
> a
  year month           x
1 2012     2  0.09704817
2 2013     2  9.93354271
3 2012     7 10.19073868
4 2013     7  9.78324133

也许不是最好的方法,但是通过相应的年和月的平均值来过滤d数据帧的简单方法是使用合并da的临时数据帧,如下所示:

work <- merge(d, a)
subset(work, x > 1)

我希望这将帮助你开始!

最新更新