如何在R中构造不同年份的随机数据集?

如何在R中构造不同年份的随机数据集?,r,dataframe,time-series,tidyverse,random-data,R,Dataframe,Time Series,Tidyverse,Random Data,下面的代码将在2009年的每日时间步生成均匀分布的数据。假设,我想构建一个类似的数据集,包括20092012年、2015年和2019年,我将如何做到这一点?。我基本上是尽量避免重复代码或使用过滤器获取感兴趣年份的数据 library(tidyverse) library(lubridate) set.seed(500) DF1 <- data.frame(Date = seq(as.Date("2009-01-01"), to = as.Date("2009

下面的代码将在2009年的每日时间步生成均匀分布的数据。假设,我想构建一个类似的数据集,包括20092012年、2015年和2019年,我将如何做到这一点?。我基本上是尽量避免重复代码或使用过滤器获取感兴趣年份的数据

library(tidyverse)
library(lubridate)

set.seed(500)
DF1 <- data.frame(Date = seq(as.Date("2009-01-01"), to = as.Date("2009-12-31"), by = "day"),
                  Flow = runif(365,20,60))
库(tidyverse)
图书馆(lubridate)
种子集(500)

DF1这里有一个选项,我们创建一个年的
向量
,在
向量
上循环,在转换到
日期
类后获得日期序列,并从均匀分布创建“流”

year <- c(2009, 2012, 2015, 2019)
lst1 <- lapply(year, function(yr) {
     dates <- seq(as.Date(paste0(yr, '-01-01')), 
                  as.Date(paste0(yr, '-12-31')), by = 'day')
     data.frame(Date = dates, 
      Flow= runif(length(dates), 20, 60))
   })

以下是一个可能的解决方案:

set.seed(123)
sample_size <- 1000

y <- sample(c(2009,2012,2015,2019),sample_size,replace=TRUE)
simulate_date <- function(year){
  n_days <- ifelse(lubridate::leap_year(year),
                   366,365)
  as.Date(sample(1:n_days, 1), origin=paste0(year,"-01-01"))
}

dates <- Reduce(`c`, purrr::map(y, simulate_date))

> head(dates)
[1] "2012-06-28" "2012-01-15" "2009-07-15" "2012-11-02" "2019-04-29"
[6] "2015-10-27"
set.seed(123)

样本大小谢谢-2012年有一个额外的一天(闰年)。您的代码确实有帮助,可能需要进一步调整?@Hydro我会调整并让您知道谢谢@akrun,我们如何将其放入data.frame中,其中第一列是
日期
,另一列是
流量
(按顺序,即第一个2009年数据,然后是2012年,依此类推)?@Hydro,使用
do.call(rbind,lst1)
set.seed(123)
sample_size <- 1000

y <- sample(c(2009,2012,2015,2019),sample_size,replace=TRUE)
simulate_date <- function(year){
  n_days <- ifelse(lubridate::leap_year(year),
                   366,365)
  as.Date(sample(1:n_days, 1), origin=paste0(year,"-01-01"))
}

dates <- Reduce(`c`, purrr::map(y, simulate_date))

> head(dates)
[1] "2012-06-28" "2012-01-15" "2009-07-15" "2012-11-02" "2019-04-29"
[6] "2015-10-27"