如何解决使用R中的配置文件将每周值分解为每日值
我有一些每周的价值,我想根据配置文件向量进行细分。 假设我的每周数据是:
data <- data.frame(Week = c(1,2),Values = c(100,1000))
个人资料和工作日为:
profile <- c(0.1,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,40,10,100,200,400,100))
解决方法
我们可以将“数据”的行乘以“天”的length
,然后将paste
复制为“周”,“天”向量,同时将“值”和“配置文件”向量相乘
library(dplyr)
library(tidyr)
library(stringr)
data %>%
uncount(length(days)) %>%
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
,
您可以在expand_grid()
中使用tidyr
。
library(dplyr)
library(tidyr)
data %>%
expand_grid(Day = days) %>%
transmute(Day = paste(Week,Day,sep = "_"),output = Values * profile)
# # A tibble: 10 x 2
# Day output
# <chr> <dbl>
# 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