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

时间:2014-07-02 19:15:45

标签: r

我是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 ) 

1 个答案:

答案 0 :(得分: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数据框的简单方法是使用合并d和{{的临时数据框架1}},像这样:

a

我希望这会帮助你开始!