У меня есть данные:

set.seed(2021)
sales <- round(runif(672, 10, 50), 0)

Я хочу добавить данные о продажах в фрейм данных в виде нового столбца. мой фреймворк выглядит так:

library(lubridate)
library(tidyr)
gen_month <- function(first_datex){
  first_datex <- as.Date(first_datex)
  last_datex <- ceiling_date(first_datex, 'month') - 1
  expand_grid(datex = seq(first_datex, last_datex, by = 'day'), hourx = 0:23)
}
mydata <- gen_month("2021-03-01")

В качестве образца я использую месяц март в качестве своих данных. Таким образом, мы объединяем mydata и продажи.

set.seed(2021)
sales <- c(sales, rep(NA,72))
df <- data.frame(mydata, sales)

#tail(df)
#         datex hourx sales
#739 2021-03-31    18    NA
#740 2021-03-31    19    NA
#741 2021-03-31    20    NA
#742 2021-03-31    21    NA
#743 2021-03-31    22    NA
#744 2021-03-31    23    NA

Но поскольку объем данных о продажах меньше mydata, мы заполняем данные NA в марте, используя ранние данные df. Результат, на который я надеюсь:

df <- data.frame(mydata, sales2 = c(sales, sales[1:72]))
# head(df,72) & tail(df,72) should be same.

Мой вопрос

  1. Как нам автоматизировать этот процесс ?.
  2. Если объем данных о продажах больше, чем mydata, нам нужно сократить данные о продажах, чтобы они поместились в mydata. Может ли это стать только одним решением с моим первым вопросом?

Большое спасибо.

1
Faryan 9 Окт 2021 в 16:17

2 ответа

Лучший ответ

Вы можете подгруппировать данные sales в зависимости от количества строк в mydata.

mydata$sales <- sales[1:nrow(mydata)]
1
Ronak Shah 9 Окт 2021 в 14:01

Мы также можем сделать

mydata$sales <- sales[seq_len(nrow(mydata))]
0
akrun 9 Окт 2021 в 16:14