Добавьте дату в первый элемент вектора, чтобы получить новую дату, а затем добавьте следующий элемент, чтобы сгенерировать новую дату, и так далее. - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь сгенерировать некоторые поддельные данные, чтобы сделать набор данных, чтобы я мог провести некоторый анализ.Я пытаюсь создать набор данных, в котором у меня есть дата стрижки, а затем сгенерировать другие даты на основе обычного асимметричного генерирования данных.Конечная цель - предсказать будущие интервалы стрижки.

Я построил это для одного клиента, но я пытаюсь делать это снова и снова для разных значений n, поэтому мне нужна помощь, чтобы сделать его более программным.Я пробовал разные петли и подхожу с пустыми руками.Я немного новичок в программировании.Заранее спасибо!

#load the library for skewed normal generation
library(fGarch) 
#set observations and generate data
n=5
set.seed(1)
days_since_last=rsnorm(n, mean = 35, sd = 5, xi = 2)
days_since_last=as.integer(days_since_last)

#generate random date to start
haircut_date = sample(seq(as.Date('2018/01/01'), as.Date('2019/01/01'), by="day"), 1)

#generate new dates
haircut_date2=haircut_date + days_since_last[1]
haircut_date3=haircut_date2 + days_since_last[2]
haircut_date4=haircut_date3 + days_since_last[4]
haircut_date5=haircut_date4 + days_since_last[4]
haircut_date6=haircut_date4 + days_since_last[5]

#combine dates
date = c(haircut_date2,haircut_date3,haircut_date4,haircut_date5,haircut_date6)

#add dates to generated intervals in a dataframe
haircut_df=data.frame(days_since_last,date)

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Небольшое отклонение, создание фрейма данных сразу после вашей строки haircut_date = sample...:

haircut_df <- data.frame(days_since_last = c(0,days_since_last),
                         date = c(haircut_date, haircut_date + cumsum(days_since_last)))

В результате:

> haircut_df
  days_since_last       date
1               0 2018-07-02
2              39 2018-08-10
3              33 2018-09-12
4              41 2018-10-23
5              28 2018-11-20
6              32 2018-12-22
0 голосов
/ 16 февраля 2019

Это должно дать вам то, что вы ищете,

#load the library for skewed normal generation
library(fGarch) 
#set observations and generate data
n=10
set.seed(1)
days_since_last=as.integer(rsnorm(n, mean = 35, sd = 5, xi = 2))

# Creating a variable for cumulative days since the first haircut
cumulative<-cumsum(days_since_last)

#generate random date to start
haircut_date = sample(seq(as.Date('2018/01/01'), as.Date('2019/01/01'), by="day"), 1)

#initializing variable and looping for n
haircut_dates<-as.Date(x = integer(0), origin = "1970-01-01")    
for (i in 1:n)
{
  haircut_dates[i]<-haircut_date+cumulative[i]
}

#add dates to generated intervals in a dataframe
haircut_df=data.frame(haircut_dates,days_since_last)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...