如何在R中构建不同年份的随机数据集?
How to construct a random data set of different year in R?
下面的代码将在 2009 年的每日时间步生成均匀分布的数据。假设我想构建一个类似的数据集,其中包括 2009、2012、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))
这是一个选项,我们创建 vector
年份,遍历 vector
,在转换为 Date
class 后获取日期序列并创建来自均匀分布的'Flow'
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))
})
并用 do.call
创建一个 data.frame
dat1 <- 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"
下面的代码将在 2009 年的每日时间步生成均匀分布的数据。假设我想构建一个类似的数据集,其中包括 2009、2012、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))
这是一个选项,我们创建 vector
年份,遍历 vector
,在转换为 Date
class 后获取日期序列并创建来自均匀分布的'Flow'
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))
})
并用 do.call
dat1 <- 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"