Разбейте еженедельные значения на ежедневные значения, используя профиль в r

#r

#r

Вопрос:

У меня есть еженедельные значения, которые я хочу разбить в соответствии с вектором профиля. Предположим, что мои еженедельные данные:

 data <- data.frame(Week = c(1, 2), Values = c(100, 1000))
  

и профиль, и рабочие дни являются:

 profile <- c(0.1, 0.2, 0.2, 0.4, 0.1)
days <- c(1, 2, 3, 4, 5)
  

Я хочу, чтобы мои выходные данные выглядели следующим образом:

 result <- data.frame(Day = c('1_1','1_2','1_3','1_4','1_5','2_1','2_2','2_3','2_4','2_5'),
                     output = c(10,20,20,40,10,100,200,200,400,100))
  

Ответ №1:

Мы можем реплицировать строки «данных» на len&th количество «дней», затем paste вектор «Неделя», «дни», умножая вектор «Значения» и «профиль»

 library(dplyr)
library(tidyr)
library(strin&r)
data %&&t;%
   uncount(len&th(days)) %&&t;% 
   transmute(Day = str_c(Week, days, sep="_"), output = Values * profile)
#   Day output
#1  1_1     10
#2  1_2     20
#3  1_3     20
#4  1_4     40
#5  1_5     10
#6  2_1    100
#7  2_2    200
#8  2_3    200
#9  2_4    400
#10 2_5    100
  

Ответ №2:

Вы можете использовать expand_&rid() в tidyr .

 library(dplyr)
library(tidyr)

data %&&t;%
  expand_&rid(Day = days) %&&t;%
  transmute(Day = paste(Week, Day, sep = "_"), output = Values * profile)

# # A tibble: 10 x 2
#    Day   output
#    <chr&&t;  <dbl&&t;
#  1 1_1       10
#  2 1_2       20
#  3 1_3       20
#  4 1_4       40
#  5 1_5       10
#  6 2_1      100
#  7 2_2      200
#  8 2_3      200
#  9 2_4      400
# 10 2_5      100