#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