【问题标题】:Redundant dates in time series时间序列中的冗余日期
【发布时间】:2017-12-16 07:16:56
【问题描述】:

我正在从一个数据框架(“TotalGuirvidig”)中设置一个时间序列,其中我有 3 个主要关注列:“日期”、“动物”,以及我创建的第三列“Daily_Animals”,一个同一天所有动物数量的总和。我创建了“Daily_Animals”,不唱歌

TotalGuirvidig <- Guirvidig %>% group_by(Date) %>% mutate(Daily_Animals = sum(Animals))

很好,但假设日期是 2017 年 7 月 11 日,我们观察了 40、23 和 17 只动物。现在,在 Daily_Animals 列中,我们得到 80 的总和 3 次,每次原始观察一次。

一开始我并没有想太多,但是当我将数据框转换为时间序列时

GTS <- zoo(TotalGuirvidig$Daily_Animals, order.by=as.Date(TotalGuirvidig$Date, format='%Y/%m/%d'))
ts(GTS)

我注意到具有多个观测值的日期在同一日期出现多次,因为同一日期的每个观测值具有相同的 Daily_Animal 总和。

我正计划进行一些预测,但我担心这些每日总和的重复会影响我的预测。在建立我的时间序列时,有什么方法可以让 R 忽略同一日期的重复总和?

编辑:这是数据框的示例

Year  Week       Date  Location Animals           From            To     Notes Daily_Animals
<int> <int>     <date>     <chr>   <int>          <chr>         <chr>     <chr>         <int>
1  2010    31 2010-08-01 GUIRVIDIG     580 Bongor – Tchad BANKI NIGERIA       RAS           580
2  2010    32 2010-08-08 GUIRVIDIG     780  Glenden Tchad BANKI NIGERIA       RAS           780
3  2010    33         NA GUIRVIDIG      NA           <NA>          <NA>      <NA>            NA
4  2010    34 2010-08-22 GUIRVIDIG     680 Bongor – Tchad BANKI NIGERIA   2 voles           680
5  2010    34 2010-08-23 GUIRVIDIG     880  Glenden Tchad BANKI NIGERIA       RAS           880
6  2010    35 2010-08-29 GUIRVIDIG     495 Bongor – Tchad BANKI NIGERIA       RAS           495
7  2010    35 2010-08-30 GUIRVIDIG     506  Glenden Tchad BANKI NIGERIA 1 malades           506
8  2010    36 2010-09-06 GUIRVIDIG     262   kijabe-tchad BANKI NIGERIA       RAS           262
9  2010    37 2010-09-13 GUIRVIDIG      70  Glenden Tchad BANKI NIGERIA       RAS            70
10  2010    38         NA GUIRVIDIG      NA           <NA>          <NA>      <NA>            NA
# ... with 484 more rows

Edit2:下面是一个虚构的示例,实际演示了如何编写新列

Year  Week       Date  Location Animals           From            To     Notes Daily_Animals
<int> <int>     <date>     <chr>   <int>          <chr>         <chr>     <chr>         <int>
1  2010    31 2010-08-01 GUIRVIDIG     40 Bongor – Tchad BANKI NIGERIA       RAS           80
2  2010    32 2010-08-01 GUIRVIDIG     23  Glenden Tchad BANKI NIGERIA       RAS           80
3  2010    34 2010-08-21 GUIRVIDIG     17 Bongor – Tchad BANKI NIGERIA   2 voles           80

【问题讨论】:

  • 你能发一个数据的例子吗?

标签: r time-series repeat


【解决方案1】:

如果您不想为每个单独的动物计数保留一行,那么也许您想使用 dplyr::summarise 而不是 mutate,因为 mutate 只会添加一列但会保留所有行?

?summarise 
TotalGuirvidig <- Guirvidig %>% group_by(Date) %>% summarise(Daily_Animals = sum(Animals))

或者您可以在 mutate 之后使用 dplyr::distinct 并选择要保留不同值的列。

?distinct
TotalGuirvidig <- Guirvidig %>% group_by(Date) %>% mutate(Daily_Animals = sum(Animals)) %>%
          distinct(Date, .keep_all = TRUE)

很难确切地看出什么是最好的,因为在您的示例数据中没有重复的 Daily_Animals,所以如果上述方法不起作用,可能会显示一个包含重复项和所需输出的部分?

【讨论】:

  • 我在一个新表中进行了编辑,以展示我看到的更好的东西。在这个例子中,我担心的是,在设置时间序列时,R 在一天内对 80 只动物计数 3 次,而不是将每个日期视为最多一组整数
  • 我仍然不确定我是否理解您想要什么(我假设您计划在第二次编辑中的所有 3 个日期都相同?)。当您同时使用 group_by() 和 mutate() 时,它将对该日期的所有三个值求和(因此 40+23+17),但它将保持 3 次,因为 mutate 不会删除行。如果您只想要每日总数,那么它不会出现 3 次,您最好使用 group_by() %>% summarise() 正如我所说的。抱歉 - 你的例子还不够清楚,我无法更好地了解如何提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多