【发布时间】:2021-06-01 20:47:44
【问题描述】:
我有一个包含日期、ID 和坐标的数据集,我想将其拆分为季节性月份。例如,对于冬天,我将一月发送至winter1,二月发送至winter2,三月发送至winter3。我在夏季也这样做了。
我想过滤掉所有这些月份的 ID,这样当我按 ID 和年份拆分数据时,我会得到相同的列表长度。
我不确定如何在下面的示例代码中模拟每个 ID 的不均匀值,但在我的实际数据中,一些 ID 只有summer1 而不是winter1,而可以翻转为summer2和winter2`。
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 ~ 'summer1',
month %in% 7 ~ 'summer2',
month %in% 8 ~ 'summer3',
month %in% 1 ~ 'winter1',
month %in% 2 ~ 'winter2',
month %in% 3 ~ 'winter3')) %>%
group_by(year, ID )%>%
filter(any(month %in% 6:8) &
any(month %in% 1:3))
summer_list <- df1 %>%
filter(season_categ == "summer1") %>%
group_split(year, ID)
# Renames the names in the list to AnimalID and year
names(summer_list) <- sapply(summer_list,
function(x) paste(x$ID[1],
x$year[1], sep = '_'))
# Creates a list for each year and by ID
winter_list <- df1 %>%
filter(season_categ == "winter1") %>%
group_split(year, ID)
names(winter_list) <- sapply(winter_list,
function(x) paste(x$ID[1],
x$year[1], sep = '_'))
【问题讨论】: