【问题标题】:How to combine aggregate per month and splitting a data set at a certain date如何合并每月汇总并在某个日期拆分数据集
【发布时间】:2021-03-25 01:59:08
【问题描述】:

我正在尝试创建两个不同时间集的降水值的月平均值,但在进行聚合之前我无法将数据分成两部分。

我有一个从 2006 年 1 月 1 日到 2099 年 12 月 31 日的每日降水数据集,我想在(2015 年 1 月 1 日到 2054 年 1 月 12 日)的时间段内每月汇总和( 01-01-2055 至 31-12-2099)。

我已经使用聚合函数来创建这样的每月平均值。但是现在我有整个数据集(2006-2100)的每月平均值,我想要两个列表(一个用于 01-01-2015 到 31-12-2054,一个用于 01-01-2055 到 31- 12-2099)。我想我需要制作一个子集或拆分数据,但我找不到如何将它与聚合函数结合起来。非常感谢!

months = Alentejo_RCP4.5_Average$Month
Alentejo_RCP4.5_Average.myma = aggregate(x = Alentejo_RCP4.5_Average, 
                            by = list(months), FUN = mean)

我也试过这个,但它只需要日期而不是日期的附加值。

df <- data.frame(date=as.Date("2015-01-01")+1:365, x=1:365)
list <- split(df,df$date<as.Date("2055-01-01"))

zz <- " Year Month Day Date Average_P
2006     1   1 2006-01-01   6.5
2007     1   2 2007-01-02   2.8
2055     3   3 2055-03-03   3.5
2058     3   4 2058-03-04   5.1
2060     5   5 2060-05-05   3.2"

Data <- read.table(text=zz, header = TRUE)

【问题讨论】:

    标签: r date split aggregate subset


    【解决方案1】:

    您可以创建一个新列来区分两个组,而不是拆分数据集,并获取每个组和每个月的mean

    Data %>%
      mutate(Date = as.Date(Date), 
             group =  ifelse(Date < as.Date("2055-01-01"), 
                            'below_2055', 'above_2055'), 
             month = format(Date, '%m-%Y'))  %>%
      group_by(group, Date) %>%
      summarise(Average_P = mean(Average_P)) -> result
    

    或者在基础 R 中:

    Data$Date <- as.Date(Data$Date)
    aggregate(Average_P~group + month, 
              transform(Data, 
                        group = ifelse(Date < as.Date("2055-01-01"), 
                                'below_2055', 'above_2055'),
                        month = format(Date, '%m-%Y')), mean) -> result
    

    如果您需要最终输出作为列表,则可以使用split

    split(result,result$group)
    

    【讨论】:

    • 感谢您的回答!我已通过以下方式尝试了您的脚本:aggregate(Alentejo_RCP4.5_Average$Average_P + Alentejo_RCP4.5_Average$Month, transform(df, group = ifelse(date &lt; as.Date('2055-01-01'), 'below_2055', 'above_2055'), month = format(date, '%m-%Y')), mean) -&gt; result result 但我收到此错误Error in as.data.frame.default(x[[i]], optional = TRUE) : cannot coerce class ‘"function"’ to a data.frame 有什么想法吗?
    • 谢谢,我将再次尝试使用 df 和 x。这是数据集的示例。年月日日平均值_QS平均值_TN平均值_TX平均值_WS平均值_P 2006 1 1 2006-01-01 4706.250 7.372229 14.47186 2.6203508 6.560209e+00
    • 对不起,我对此很陌生,非常感谢您的回答。我试图根据您发送给我的页面制作数据集的样本。希望它有效! zz &lt;- " Year Month Day Date Average_QS Average_TN Average_TX Average_WS Average_P 1 2006 1 1 2006-01-01 4706 7.37 14 2.6 6.5 2 2007 1 2 2007-01-02 5659 5.71 13 2.4 2.8 3 2055 3 3 2055-03-03 4427 5.72 13 1.9 3.5 4 2058 3 4 2058-03-04 3172 9.37 14 2.3 5.1 5 2060 1 5 2060-01-05 4947 8.32 13 2.6 3.2" Data &lt;- read.table(text=zz, header = TRUE)
    • 我试过这样做,但它没有进入描述中的“脚本模式”,它仍然可以这样使用吗?
    猜你喜欢
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多