Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
R 选择既有夏季又有冬季的年份_R_Dplyr_Tidyverse_Tidyr - Fatal编程技术网

R 选择既有夏季又有冬季的年份

R 选择既有夏季又有冬季的年份,r,dplyr,tidyverse,tidyr,R,Dplyr,Tidyverse,Tidyr,我有一个数据集,分为夏季和冬季,跨越多年。我刚刚意识到,当我把它们分为冬季和夏季时,我最终得到的冬季比夏季多。我认为问题在于,我的数据在夏季开始时结束,或在冬季结束时结束 我是否需要设置一个参数,以便只选择夏季和冬季同时存在的年份 library(lubridate) library(tidyverse) date <- rep_len(seq(dmy("01-01-2010"), dmy("31-12-2013"), by = "day

我有一个数据集,分为夏季和冬季,跨越多年。我刚刚意识到,当我把它们分为冬季和夏季时,我最终得到的冬季比夏季多。我认为问题在于,我的数据在夏季开始时结束,或在冬季结束时结束

我是否需要设置一个参数,以便只选择夏季和冬季同时存在的年份

library(lubridate)
library(tidyverse)

date <- rep_len(seq(dmy("01-01-2010"), dmy("31-12-2013"), by = "days"),1000)
ID <- rep(seq(1, 5), 100)

df <- data.frame(date = date,
                 x = runif(length(date), min = 60000, max = 80000),
                 y = runif(length(date), min = 800000, max = 900000),
                 ID)

df$month <- month(df$date)
df$year <- year(df$date)

df1 <- df %>%
  mutate(season_categ = case_when(month %in% 6:8 ~ 'summer',
                                  month %in% 1:3 ~ 'winter')) %>%
  group_by(ID, year, season_categ)

summer_list <- df1 %>% 
  group_by(ID, year)%>% 
  filter(season_categ == "summer") %>% 
  group_split()

winter_list <- df1 %>% 
  group_by(ID, year) %>% 
  filter(season_categ == "winter") %>% 
  group_split()
这应该做到:

df1 %>% 
  group_by(year) %>% 
  filter(any(season_categ == "winter") & 
           any(season_categ == "summer"))
为了测试它,我们可以先从2010年开始删除冬季月份,例如,获得一个不完整的年份:

df1%>% 滤器年份==2010年和季节类别==冬季%>% 分组单位按年份%>% 过滤器季节=冬季& 任何季节=夏季 >A tibble:635x7 >组别:年份[2] >日期x y ID月份年份季节类别 > > 1 2011-01-01 69169. 8808562011年冬季 > 2 2011-01-02 62891. 8697482011年冬季 > 3 2011-01-03 64951. 8512202011年冬季 > 4 2011-01-04 77424. 8440412011年冬季 > 5 2011-01-05 75827. 8615332011年冬季 > 6 2011-01-06 72937. 8300142011年冬季 > 7 2011-01-07 60130. 8303692011年冬季 > 8 2011-01-08 79719. 8128522011年冬季 > 9 2011-01-09 60300. 8451202011年冬季 > 10 2011-01-10 62817. 8797592011年冬季 >…还有625行 这与df1%>%filteryear!=2010年我的约会,这意味着它成功了。

这应该可以做到:

df1 %>% 
  group_by(year) %>% 
  filter(any(season_categ == "winter") & 
           any(season_categ == "summer"))
为了测试它,我们可以先从2010年开始删除冬季月份,例如,获得一个不完整的年份:

df1%>% 滤器年份==2010年和季节类别==冬季%>% 分组单位按年份%>% 过滤器季节=冬季& 任何季节=夏季 >A tibble:635x7 >组别:年份[2] >日期x y ID月份年份季节类别 > > 1 2011-01-01 69169. 8808562011年冬季 > 2 2011-01-02 62891. 8697482011年冬季 > 3 2011-01-03 64951. 8512202011年冬季 > 4 2011-01-04 77424. 8440412011年冬季 > 5 2011-01-05 75827. 8615332011年冬季 > 6 2011-01-06 72937. 8300142011年冬季 > 7 2011-01-07 60130. 8303692011年冬季 > 8 2011-01-08 79719. 8128522011年冬季 > 9 2011-01-09 60300. 8451202011年冬季 > 10 2011-01-10 62817. 8797592011年冬季 >…还有625行 这与df1%>%filteryear!=2010年,我的约会成功了。

我试过这个

两个季节同时出现的年份,如果按年份计算大于3但小于6,则平均月数,这就是您创建该列的方式。 这会给你想要的结果。但问题可能出在其他地方,比如你可能有不同的月数,例如1,2,6,7,8,这两个季节都有,但两个子集中的行数不同。

我试过这个

两个季节同时出现的年份,如果按年份计算大于3但小于6,则平均月数,这就是您创建该列的方式。
这会给你想要的结果。但问题可能出在其他地方,比如你可能有不同的月数,例如1,2,6,7,8,这两个季节都有,但两个子集中的行数不同。

部分取决于你使用的是气象季节还是天文季节。或者,如果你想把一个季节推几天而不是几个月。这里有一个建议可以让你做到这一点

季节% 变异 年=年日期, yday=ydaydate, 季节=名称季节[findIntervalyday,cseasons,Inf], %>% filteryear>2010 |用于测试的季节百分比(共%c个),冬季%>%人工 分组单位按年份%>% countseason%>% tidyr::pivot\u wideryear,name\u from=季节,value\u from=n 一个tibble:3x5 组别:年份[3] 年秋冬春夏 1 2010 91 90 NA 2 2011 91 90 92 92 3 2012 28 58 92 92 从这里,我们添加了一个分组过滤器:

如图所示,百分比为%>% 变异 年=年日期, yday=ydaydate, 季节=名称季节[findIntervalyday,cseasons,Inf], %>% filteryear>2010 |用于测试的季节百分比(共%c个),冬季%>%人工 分组单位按年份%>% filterallcwinter,summer%在%season%>%这是新产品线 样本10 一个tibble:20x7 组别:年份[2] 日期x y ID年正午季节 1 2011-02-13 61686. 8156642011年4月44日冬季 2 2011-10-23 75448. 8494772011年1月296日秋季 3 2011-07-15 75901. 8409692011年1月196日夏季 4 2011-05-29 66108. 8115652011年4月149日春天 5 2011-03-07 70298. 831 3042011年1月66日春天 6 2011-09-18 73951. 8757122011年1月261日秋季 7 2011-08-04 64917. 8602392011年1月216日夏季 8 2011-11-29 78909. 8026922011年3月333日秋季 9 2011-01-07 66441. 8680622011年2月7日冬季 10 2011-06-16 64583. 8891242011年2月167日夏季 11 2012-05-09 78725. 8629342012年5月130日春季 12 2012-08-12 67767. 8712292012年5月225日夏季 13 2012-06-28 62354. 8988292012年5月180日夏季 14 2012-05-26 62373. 8190592012年2月147日春天 15 2012-06-21 68019. 8963702012年3月173日夏季 16 2012-01-22 61753. 8727782012年2月22日冬季 17 2012-03-18 64490. 8102922012年3月78日春季 18 2012-08-15 76048. 8757652012年3月228日夏季 19 2012-09-15 65386. 8854312012年4月259日秋季 20 2012-04-19 60072. 8952922012年5月110日春季 从2010年开始就没有了,这是我们所期待的

数据 我在随机数据中使用了一个种子进行再现:

第42集
日期部分取决于您使用的是气象季节还是天文季节。或者,如果你想把一个季节推几天而不是几个月。这里有一个建议可以让你做到这一点

季节% 变异 年=年日期, yday=ydaydate, 季节=名称季节[findIntervalyday,cseasons,Inf], %>% filteryear>2010 |用于测试的季节百分比(共%c个),冬季%>%人工 分组单位按年份%>% countseason%>% tidyr::pivot\u wideryear,name\u from=季节,value\u from=n 一个tibble:3x5 组别:年份[3] 年秋冬春夏 1 2010 91 90 NA 2 2011 91 90 92 92 3 2012 28 58 92 92 从这里,我们添加了一个分组过滤器:

如图所示,百分比为%>% 变异 年=年日期, yday=ydaydate, 季节=名称季节[findIntervalyday,cseasons,Inf], %>% filteryear>2010 |用于测试的季节百分比(共%c个),冬季%>%人工 分组单位按年份%>% filterallcwinter,summer%在%season%>%这是新产品线 样本10 一个tibble:20x7 组别:年份[2] 日期x y ID年正午季节 1 2011-02-13 61686. 8156642011年4月44日冬季 2 2011-10-23 75448. 8494772011年1月296日秋季 3 2011-07-15 75901. 8409692011年1月196日夏季 4 2011-05-29 66108. 8115652011年4月149日春天 5 2011-03-07 70298. 8313042011年1月66日春天 6 2011-09-18 73951. 8757122011年1月261日秋季 7 2011-08-04 64917. 8602392011年1月216日夏季 8 2011-11-29 78909. 8026922011年3月333日秋季 9 2011-01-07 66441. 8680622011年2月7日冬季 10 2011-06-16 64583. 8891242011年2月167日夏季 11 2012-05-09 78725. 8629342012年5月130日春季 12 2012-08-12 67767. 8712292012年5月225日夏季 13 2012-06-28 62354. 8988292012年5月180日夏季 14 2012-05-26 62373. 8190592012年2月147日春天 15 2012-06-21 68019. 8963702012年3月173日夏季 16 2012-01-22 61753. 8727782012年2月22日冬季 17 2012-03-18 64490. 8102922012年3月78日春季 18 2012-08-15 76048. 8757652012年3月228日夏季 19 2012-09-15 65386. 8854312012年4月259日秋季 20 2012-04-19 60072. 8952922012年5月110日春季 从2010年开始就没有了,这是我们所期待的

数据 我在随机数据中使用了一个种子进行再现:

第42集
当月份既不在1:3也不在6:8时,日期只是要求澄清??你们有随机数,所以我们看到的总是和你们看到的不同。在开始使用runif之前,您可以使用set.seed42或一些数字等来防止这种情况。当月份既不在1:3也不在6:8时,只需询问澄清??您有随机数,因此我们看到的总是与您看到的不同。在开始使用runif之前,您可以使用set.seed42或一些数字来防止这种情况。