跨多年迭代一个过程
Iterating a process across multiple years
我有多年的数据,我想将每年分为夏季和冬季。我已经能够一次做到一年,但我想知道是否有更有效的方法来做到这一点。有没有办法在每年的某个时间迭代我一年的所有内容?
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")
我们可以 filter
通过 'season_categ' 然后使用 group_split
(或 split
从 base R
)到 return a 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))
我有多年的数据,我想将每年分为夏季和冬季。我已经能够一次做到一年,但我想知道是否有更有效的方法来做到这一点。有没有办法在每年的某个时间迭代我一年的所有内容?
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")
我们可以 filter
通过 'season_categ' 然后使用 group_split
(或 split
从 base R
)到 return a 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))