【问题标题】:Zoo::yearmon class: removing records that do not contain all months for a given yearZoo::yearmon 类:删除不包含给定年份所有月份的记录
【发布时间】:2018-09-12 04:57:54
【问题描述】:

我在 R 中有一个数据框,其中包括城市名称、年份和月份。如下所示:

Sample data set with Month, Year, and City columns

此表包含数千条记录。有些城市没有一年中每个月的数据(例如,上例中洛杉矶的 1920 年数据仅包含 1 月和 2 月),这意味着它们不完整。我只想提取给定城市完整的那些年份(例如,包含该年的所有 12 个月,如上例中的多伦多)。

我尝试将它转换为 zoo::yearmon 类,但我不知道如何操作它来完成我上面描述的操作。我相信可以编写一个脚本来查看年份和城市名称,检查它是否包含所有 12 个月,然后省略不包含的年份。

【问题讨论】:

标签: r date dataframe zoo


【解决方案1】:

这是使用dplyr 包的解决方案:

df %>% 
  group_by(City, Year) %>% 
  filter(length(unique(Month)) == 12)

我按CityYear 分组,然后筛选出具有12 个不同月份的那些。 (我假设您的数据框称为df。)


现在,如果您只想要一个特定的城市,比如多伦多,您可以使用以下内容:

df %>% 
  filter(City == "Toronto") %>%
  group_by(Year) %>% 
  filter(length(unique(Month)) == 12)

【讨论】:

  • 这对我有用!非常感谢您花时间回答!
【解决方案2】:

这是一个使用data.table的选项

library(data.table)
setDT(df)[, .SD[uniqueN(Month)==12], .(City, Year)]

【讨论】:

  • 这也有效。感谢您花时间回答!我不确定哪种方法更好。
猜你喜欢
  • 2023-04-05
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多