【问题标题】:How to filter for a specific time period, which must be complete (have all months)?如何过滤特定时间段,必须完整(有所有月份)?
【发布时间】:2021-01-20 04:47:17
【问题描述】:

我有一个庞大的数据集,在不同的研究领域中,重复的 Plot 测量(计数数据)覆盖了很长的时间跨度。我现在想过滤数据,以便我只剩下完整的田间季节(4 月至 11 月)。有些地区是在同一年份抽样的,有些地区是在不同年份抽样的。

到目前为止我有:

arthropods.all.sea <- with(arthropods.all, arthropods.all[month(Date) >= 4 & month(Date) < 12, ])

但不知道如何包括每个区域必须完成田间季节的条件。

非常感谢任何帮助。

我创建了一个虚拟数据集,以说明我的真实数据集的样子。

df1 <- data.frame(ID = c("Ki_1","Ki_2","Ki_2","Ki_3","Ho_1","Ho_2"),
                  Date = as.POSIXct(c('1999-06-23', '1998-09-25', '1998-08-22', '2000-08-22', '1990-05-01', '1991-07-06')),
                  Area = c("Kin", "Kin", "Kin", "Kin","Hohe", "Hohe"),
                  Species=c("Species1","Species1","Species2","Species1","Species10","Species11"),
                  Count=c(12,23,21,14,7,2))

【问题讨论】:

  • 您能否使用 dput() 分享可重现的输出
  • 我刚刚更新了我的问题以包含一个虚拟数据集。
  • 你知道哪些地区是同年4-11月的样本,哪些地区是不同年份的样本吗?
  • 是的,我确实知道在哪一年对哪些地区进行了采样。

标签: r dataframe date subset


【解决方案1】:

您只能选择那些从 4 月到 11 月的所有月份都存在于数据中的 Area

library(dplyr)
library(lubridate)

result <- df1 %>%
            mutate(year = year(Date), month = month(Date)) %>%
            group_by(Area, year) %>%
            filter(all(4:11 %in% month) & month %in% 4:11)

【讨论】:

  • 代码运行了,但是输出的data.frame和原来的一模一样?
  • 不,例如,一些地区在某些年份只有 5 月的数据。我想知道年份是否应该包括在某个地方?因为可能有一年中某个地区 6 月的数据,但没有其他年份的采样数据……感谢您的帮助!
  • 是的,我只想要其中包含的每个区域的年份,数据在 4:12 月份是完整的。该代码似乎有效,因为它更改了数据集 - 但不知何故,数据集仍然不限于月份 4:12,所有其他月份仍然存在吗?不知道这里发生了什么......它正在对某些东西进行子集化,但它没有做我正在寻找的......
  • 抱歉,给您带来了困惑,非常感谢!你能解释一下为什么你需要两次 4:12 %in% 吗?以便我下次知道?
  • all(4:11 %in% month) 确保每个 Groupeach Year 中都存在从 4 到 11 的所有月份,这也意味着可能存在第 1-3 个月和第 4 个月的数据-11 删除那些额外的 1-3 个月的数据,我们使用另一个 month %in% 4:11
猜你喜欢
  • 1970-01-01
  • 2018-01-03
  • 2022-12-10
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2019-03-23
  • 2018-08-06
相关资源
最近更新 更多