Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
yearmon类:删除不包含给定年份所有月份的记录_R_Date_Dataframe_Zoo - Fatal编程技术网

yearmon类:删除不包含给定年份所有月份的记录

yearmon类:删除不包含给定年份所有月份的记录,r,date,dataframe,zoo,R,Date,Dataframe,Zoo,我在R中有一个数据框,包括城市名称、年份和月份。如下所示: df %>% filter(City == "Toronto") %>% group_by(Year) %>% filter(length(unique(Month)) == 12) 此表继续显示数千条记录。一些城市没有一年中每个月的数据(例如,上例中洛杉矶1920年的数据仅包含一月和二月),这意味着它们是不完整的。我只想提取给定城市的完整年份(例如,包含该年的所有12个月,如上述示例中的多伦多)

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

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

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


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

以下是使用
dplyr
包的解决方案:

df %>% 
  group_by(City, Year) %>% 
  filter(length(unique(Month)) == 12)
我按
城市
年份
分组,然后筛选出具有12个唯一月份的。(我假设您的数据帧被称为
df


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

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

这里有一个使用
数据的选项。表

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

请使用
dput()
共享您的数据。我们是否可以假设,对于
城市
+
不会发生多次?例如,只有一个1922年1月在多伦多?这对我来说很有用!非常感谢您抽出时间回答!这也起了作用。感谢您抽出时间回答!但我不确定哪种方法更好。