首页 > 解决方案 > 使用 tidyverse 对大型时间序列数据集有条件地聚合列

问题描述

在查看了其他一些问题并阅读了一些指南之后,我无法找到适合我的具体问题的解决方案。这是开始的数据示例:

data <- data.frame(
        Date = sample(c("1993-07-05", "1993-07-05", "1993-07-05", "1993-08-30", "1993-08-30", "1993-08-30", "1993-08-30", "1993-09-04", "1993-09-04")),
        Site = sample(c("1", "1", "1", "1", "1", "1", "1", "1", "1")),
        Station = sample(c("1", "2", "3", "1", "2", "3", "4", "1", "2")),   
        Oxygen = sample(c("0.9", "0.4", "4.2", "5.6", "7.3", "4.3", "9.5", "5.3", "0.3")))

我想对嵌套在与日期相对应的站点内的站点的所有氧气值进行平均。我的数据集有几千行,就像在示例中一样,站的数量是奇数,并且日期的长度是不均匀的。

我正在寻找的输出是诸如“日期-> 站点-> 平均氧气”之类的列,在新版本的时间序列中完全不需要一个站列。

任何帮助将不胜感激!

标签: rdplyrtime-seriestidyverse

解决方案


按'Site','Date'分组后,得到mean'Oxygen'(将其转换为numeric- 它是factor列)

library(tidyverse)
data %>%
   group_by(Site, Date) %>% 
   summarise(AverageOxygen = mean(as.numeric(as.character(Oxygen))))
# A tibble: 3 x 3
# Groups:   Site [1]
#  Site  Date       AverageOxygen
#  <fct> <fct>              <dbl>
#1 1     1993-07-05          3.97
#2 1     1993-08-30          5.2 
#3 1     1993-09-04          2.55

推荐阅读