如何在R中创建多个日期范围的子集
我有一个数据框,上面有日期和数字,叫做“df”。我有另一个带有开始和结束日期的数据框,称为“日期范围” 我的目标是筛选/子集df,使其仅显示日期范围列每行中的开始/结束日期。以下是我目前的代码:如何在R中创建多个日期范围的子集,r,lubridate,R,Lubridate,我有一个数据框,上面有日期和数字,叫做“df”。我有另一个带有开始和结束日期的数据框,称为“日期范围” 我的目标是筛选/子集df,使其仅显示日期范围列每行中的开始/结束日期。以下是我目前的代码: df_date您可以尝试循环索引 for(i按顺序排列(日期范围$start\u日期)){ 印刷品( df%>% 过滤器(介于(df_日期、日期_范围$start_日期[i]、日期_范围$end_日期[i])) } 您可以尝试在索引中循环 for(i按顺序排列(日期范围$start\u日期)){ 印刷
df_date您可以尝试循环索引
for(i按顺序排列(日期范围$start\u日期)){
印刷品(
df%>%
过滤器(介于(df_日期、日期_范围$start_日期[i]、日期_范围$end_日期[i]))
}
您可以尝试在索引中循环
for(i按顺序排列(日期范围$start\u日期)){
印刷品(
df%>%
过滤器(介于(df_日期、日期_范围$start_日期[i]、日期_范围$end_日期[i]))
}
基本R解决方案:
# Your data creation can be simplified:
df <- data.frame(df_date = seq.Date(as.Date('2010-01-01', "%Y-%m-%d"), as.Date('2010-04-30', "%Y-%m-%d"),
by = 1), df_numbers = c(1:120))
# Store start and end date vectors to filter the data.frame:
start_dates <- as.Date(c("2010-01-06", "2010-02-01", '2010-04-15'))
end_dates <- as.Date(c("2010-01-23", "2010-02-06", '2010-04-29'))
# Subset the data to extract records with matching dates: df => stdout (Console
df[df$df_date %in% c(start_dates, end_dates),]
#您的数据创建可以简化:
df基础R溶液:
# Your data creation can be simplified:
df <- data.frame(df_date = seq.Date(as.Date('2010-01-01', "%Y-%m-%d"), as.Date('2010-04-30', "%Y-%m-%d"),
by = 1), df_numbers = c(1:120))
# Store start and end date vectors to filter the data.frame:
start_dates <- as.Date(c("2010-01-06", "2010-02-01", '2010-04-15'))
end_dates <- as.Date(c("2010-01-23", "2010-02-06", '2010-04-29'))
# Subset the data to extract records with matching dates: df => stdout (Console
df[df$df_date %in% c(start_dates, end_dates),]
#您的数据创建可以简化:
dfAtidyverse
方法可以是在start
和end\u日期之间创建一个序列
,并与df
结合,只保留范围内的日期
library(dplyr)
date_ranges %>%
mutate(df_date = purrr::map2(start_dates, end_dates, seq, "day")) %>%
tidyr::unnest(df_date) %>%
select(-start_dates, -end_dates) %>%
left_join(df, by = 'df_date')
# A tibble: 39 x 2
# df_date df_numbers
# <date> <int>
# 1 2010-01-06 6
# 2 2010-01-07 7
# 3 2010-01-08 8
# 4 2010-01-09 9
# 5 2010-01-10 10
# 6 2010-01-11 11
# 7 2010-01-12 12
# 8 2010-01-13 13
# 9 2010-01-14 14
#10 2010-01-15 15
# … with 29 more rows
库(dplyr)
日期范围%>%
突变(df_日期=purrr::map2(开始日期,结束日期,顺序,“日期”))%>%
tidyr::unnest(df_日期)%>%
选择(-开始日期,-结束日期)%>%
左联合(df,by='df\U日期')
#A tibble:39 x 2
#df_日期df_编号
#
# 1 2010-01-06 6
# 2 2010-01-07 7
# 3 2010-01-08 8
# 4 2010-01-09 9
# 5 2010-01-10 10
# 6 2010-01-11 11
# 7 2010-01-12 12
# 8 2010-01-13 13
# 9 2010-01-14 14
#10 2010-01-15 15
#…还有29行
tidyverse
方法可以是在start
和end\u日期之间创建一个序列,并与df
结合,只保留范围内的日期
library(dplyr)
date_ranges %>%
mutate(df_date = purrr::map2(start_dates, end_dates, seq, "day")) %>%
tidyr::unnest(df_date) %>%
select(-start_dates, -end_dates) %>%
left_join(df, by = 'df_date')
# A tibble: 39 x 2
# df_date df_numbers
# <date> <int>
# 1 2010-01-06 6
# 2 2010-01-07 7
# 3 2010-01-08 8
# 4 2010-01-09 9
# 5 2010-01-10 10
# 6 2010-01-11 11
# 7 2010-01-12 12
# 8 2010-01-13 13
# 9 2010-01-14 14
#10 2010-01-15 15
# … with 29 more rows
库(dplyr)
日期范围%>%
突变(df_日期=purrr::map2(开始日期,结束日期,顺序,“日期”))%>%
tidyr::unnest(df_日期)%>%
选择(-开始日期,-结束日期)%>%
左联合(df,by='df\U日期')
#A tibble:39 x 2
#df_日期df_编号
#
# 1 2010-01-06 6
# 2 2010-01-07 7
# 3 2010-01-08 8
# 4 2010-01-09 9
# 5 2010-01-10 10
# 6 2010-01-11 11
# 7 2010-01-12 12
# 8 2010-01-13 13
# 9 2010-01-14 14
#10 2010-01-15 15
#…还有29行