从每年临时数的数据框中获取每月的手段

时间:2015-04-15 19:10:31

标签: r

我有几年的日常温度值,1949-2010。我想计算每月的手段。以下是数据示例:

head(tmeasmax)
TIMESTEP   MEAN.C. MINIMUM.C. MAXIMUM.C. VARIANCE.C.2. STD_DEV.C.      SUM COUNT
1949-01-01  6.836547       6.65       7.33    0.02850574  0.1688364 1.426652     6
1949-01-02 10.533371      10.24      10.74    0.06140426  0.2477988 1.426652     6
1949-01-03 18.746729      18.02      19.78    0.18507860  0.4302076 1.426652     6
1949-01-04 21.244562      20.09      22.40    0.76106980  0.8723931 1.426652     6
1949-01-05  3.826716       3.11       5.37    0.52706647  0.7259935 1.426652     6
1949-01-06  9.127782       8.46      10.26    0.20236358  0.4498484 1.426652     6

str(tmeasmax)
'data.frame':   22645 obs. of  8 variables:
 $ TIMESTEP     : Date, format: "1949-01-01" "1949-01-02" ...
 $ MEAN.C.      : num  6.84 10.53 18.75 21.24 3.83 ...
 $ MINIMUM.C.   : num  6.65 10.24 18.02 20.09 3.11 ...
 $ MAXIMUM.C.   : num  7.33 10.74 19.78 22.4 5.37 ...
 $ VARIANCE.C.2.: num  0.0285 0.0614 0.1851 0.7611 0.5271 ...
 $ STD_DEV.C.   : num  0.169 0.248 0.43 0.872 0.726 ...
 $ SUM          : num  1.43 1.43 1.43 1.43 1.43 ...
 $ COUNT        : int  6 6 6 6 6 6 6 6 6 6 ...

There is a previous question我无法做出正面或反面。我想我可能会使用aggregate,但我不知道如何将日期分解为岁月,然后接近几年内的几个月的嵌套。我在循环中尝试了一个循环,但我永远不能让嵌套循环工作。

编辑回复评论/问题: 我一直在寻找“MEAN.C。”的意思。

3 个答案:

答案 0 :(得分:3)

这是一个快速的data.table解决方案。我假设你想要MEAN.C.(?)

的方法
library(data.table)
setDT(tmeasmax)[, .(MontlyMeans = mean(MEAN.C.)), by = .(year(TIMESTEP), month(TIMESTEP))]
#    year month MontlyMeans
# 1: 1949     1    11.71928

如果需要,您也可以一次为所有列执行此操作

tmeasmax[, lapply(.SD, mean), by = .(year(TIMESTEP), month(TIMESTEP))]
#    year month  MEAN.C. MINIMUM.C. MAXIMUM.C. VARIANCE.C.2. STD_DEV.C.      SUM COUNT
# 1: 1949     1 11.71928     11.095   12.64667     0.2942481   0.482513 1.426652     6

答案 1 :(得分:2)

以下是使用dplyr包的方法:

library(dplyr)
library(lubridate)

tmeasmax$TIMESTEP = ymd(tmeasmax$TIMESTEP)

tmeasmax %>% 
  group_by(Year=year(TIMESTEP), Month=month(TIMESTEP)) %>%
  summarise(meanDailyMin=mean(MINIMUM.C.),
            meanDailyMean=mean(MEAN.C.))

  Year Month meanDailyMin meanDailyMean
1 1949     1       11.095      11.71928

您可以按类似方式按月汇总任何其他列。

答案 2 :(得分:1)

您可以使用lubridate包创建一个由年 - 月组合组成的新因子变量,然后使用aggregate

library('lubridate')

tmeasmax2 <- within(tmeasmax, {
        monthlies <- paste(year(TIMESTEP),
                           month(TIMESTEP))
})

aggregate(tmeasmax2, list(monthlies), mean, na.rm = TRUE)