【问题标题】:Iterating a process across multiple years跨多年迭代过程
【发布时间】:2021-05-15 00:14:38
【问题描述】:

我有多年的数据,我想将每年分为夏季和冬季月份。我一次能够做到这一点一年,但我想知道是否有更有效的方法来做到这一点。有没有办法在每年的某个时间迭代我一年的内容?

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_2013 <- df1 %>% 
  group_by(ID) %>% 
  filter(year == "2010" & season_categ == "summer")

winter_2013 <- df1 %>% 
  group_by(ID) %>% 
  filter(year == "2010" & season_categ == "winter")

【问题讨论】:

    标签: r dplyr tidyverse tidyr


    【解决方案1】:

    我们可以通过'season_categ'filter,然后使用group_split(或base R 中的split)返回一个list 的数据集

    library(dplyr)
    winter_list <- df1 %>% 
                     filter(season_categ == 'winter') %>%
                     group_split(year)
    
    
    summer_list <- df1 %>% 
                     filter(season_categ == 'summer') %>%
                     group_split(year)
    

    或者base R

    winter_sub <- subset(df1, season_categ == 'winter')
    winter_list <- split(winter_sub, winter_sub$year)
    
    summer_sub <- subset(df1, season_categ == 'summer')
    summer_list <- split(winter_sub, summer_sub$year)
    

    然后,我们可以用lapply 循环list 并应用函数

    lapply(summer_list, function(x) yourfun(x))
    

    【讨论】:

      猜你喜欢
      • 2021-03-19
      • 2018-10-27
      • 2013-06-19
      • 1970-01-01
      • 2017-01-16
      • 2019-02-10
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多