【问题标题】:How can I filter specifically for certain months if the days are not the same in each year?如果每年的日子不同,我如何专门过滤某些月份?
【发布时间】:2014-03-17 01:34:32
【问题描述】:

这可能是一个已经被问过的非常简单的问题,但是.. 我有一个从 excel 中生成的 CSV 文件构建的数据框。观察结果不是均匀采样的,即它们是针对用电的“高峰”时间。这意味着他们每年排除不同的日子。我有 20 年的数据(1993-2012)并且正在运行非鲁棒和鲁棒黄土来提取季节性和线性趋势。 分解完成后,我只想关注从 6 月到 9 月的观察结果。

如何创建仅包含这些结果的新数据框?

对格式也很抱歉。

         Date MaxLoad     TMAX
1  1993-01-02    2321 118.6667
2  1993-01-04    2692 148.0000
3  1993-01-05    2539 176.0000
4  1993-01-06    2545 172.3333
5  1993-01-07    2517 177.6667
6  1993-01-08    2438 157.3333
7  1993-01-09    2302 152.0000
8  1993-01-11    2553 144.3333
9  1993-01-12    2666 146.3333
10 1993-01-13    2472 177.6667

【问题讨论】:

  • 使用 month 包中的函数 lubridate 你可以这样做:df[month(df$Date) >= 6 & month(df$Date) <= 9, ]
  • 谢谢!我知道这应该很容易,只是不知道从哪里开始。
  • @Victorp 不需要任何软件包。 base中有函数weekdaysmonthsquarters
  • 请注意 months 需要 POSIXtDate 上课日期;您可以使用as.POSIXt 函数集合进行转换。

标签: r date filter


【解决方案1】:

正如 Joran 所说,除了基本 R 之外,您不需要任何其他东西:

## Reproducible data
df <-
data.frame(Date = seq(as.Date("2009-03-15"), as.Date("2011-03-15"), by="month"),
           MaxLoad = floor(runif(25,2000,3000)), TMAX=runif(25,100,200))

## One  option
df[months(df$Date) %in% month.name[6:9],]
#          Date MaxLoad     TMAX
# 4  2009-06-15    2160 188.4607
# 5  2009-07-15    2151 164.3946
# 6  2009-08-15    2694 110.4399
# 7  2009-09-15    2460 150.4076
# 16 2010-06-15    2638 178.8341
# 17 2010-07-15    2246 131.3283
# 18 2010-08-15    2483 112.2635
# 19 2010-09-15    2174 160.9724

## Another option: strftime() will be more _generally_ useful than months()
df[as.numeric(strftime(df$Date, "%m")) %in% 6:9,]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    相关资源
    最近更新 更多