【问题标题】:R - How to subset a dataframe by month?R - 如何按月对数据框进行子集化?
【发布时间】:2014-11-13 03:44:38
【问题描述】:

好的,我正在尝试分别对 6 月、7 月和 8 月的数据进行子集化。我使用 as.Date 函数将日期转换为“日期”类。

BG.data$Date <- as.Date(BG.data$TIMESTAMP, format = "%d/%m/%Y")

接下来,我尝试通过选择 7 月份的开始日期和结束日期来对数据进行子集化。

July <- selectByDate(BG.data$Date, start = "1/7/2014", end = "31/7/2014")

我不断收到此错误消息。

 Error in as.Date.default(date) : 
 do not know how to convert 'date' to class “Date”

为什么??!!!?我有我想要在类 Date 中设置的子集,所以我不知道为什么它不起作用!

【问题讨论】:

  • 您可能会发现 lubridate 包比基础 R 中的日期更容易。
  • 该包中的哪个函数?
  • 我不知道selectByDate 是如何工作的,但是您的startend 日期格式为%d/%m/%Y,而课程日期Date 格式为%Y-%m-%d
  • 检查selectByDate。它在包装openair 中。它有一个month 参数:“选择一个月或几个月。可以是数字,例如月份 = 1:6 选择月份 1-6(1 月至 6 月),或按名称选择”。此外,您提供一个 vector 作为第一个参数,而帮助文本说您应该提供一个 data frame。请在发布前阅读帮助文本。

标签: r date subset


【解决方案1】:

为简单起见,请尝试将月份保存为新列并使用它:

BG.data$month <- factor(format(data.new$timestamp, "%B"),
                       levels = month.name)

然后你可以在 for 循环中使用它:

for (month in unique(BG.data$month)){
# get the subset
BG.subset <- BG.data[,BG.data$month == month]
# now do something with that subset
}

你也可以聚合使用:

aggregate(something ~ month,
          data = BG.data,
          FUN = function(x){ # custom function })

等等。

【讨论】:

  • 谢谢你,先生,你是老板
  • @NickDriscoll:不用担心。如果这很有用,您是否可以投票(答案左侧的箭头)或选择此作为首选答案(在答案左侧打勾)。这就是我得到温暖和绒毛的方式。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 2013-10-25
  • 1970-01-01
相关资源
最近更新 更多