【问题标题】:Subset data frame based on condition of multiple months and years in R?基于R中多个月和年的条件的子集数据框?
【发布时间】:2020-09-26 14:50:55
【问题描述】:

附件是我正在处理的数据框。

数据框中的第一列是日期。我必须根据多个月和几年的条件对数据框进行子集化。例如,我想要 2005 年和 2006 年的所有 7 月和 9 月月份的数据。

我尝试了以下代码:

output <- subset(df, format.Date(Date, "%m")==c("07", "09") & format.Date(Date, "%Y")==c("2005","2006"))

上面的代码导致了意外的输出。

我找到了有关此问题的帖子,但这些帖子仅针对单个月份和年份。

【问题讨论】:

  • 请不要将数据发布为图片。看看如何创建一个great reproducible example 来显示数据。
  • 使用 %in% 而不是 == 。通常,您也不应该直接引用方法。使用流派所以格式。日期应该是格式。

标签: r


【解决方案1】:

如果你不介意安装tidyverse 包,你可以使用这个简单的过滤:

library(tidyverse)
library(lubridate)  # should come with tidyverse, no need to install it separately

# filter July and September data in 2005 and 2006
output <- df %>%
    filter(year(Date) %in% c(2005, 2006) & month(Date) %in% c(7, 9))

如果你想使用 base R,这应该也可以:

output <- subset(df, format(Date, "%m") %in% c("07", "09") & format(Date, "%Y") %in% c("2005", "2006"))

如果df$Date 列的类是"Date"

【讨论】:

  • 感谢@raghav 的反馈,我很高兴它有效!我添加了一个基本的 R 解决方案,但它更难阅读,所以对于基本计算,我当然建议使用 tidyverse & lubridate。
猜你喜欢
  • 2019-06-01
  • 2018-12-06
  • 2016-03-19
  • 2019-10-22
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
相关资源
最近更新 更多