У меня есть dataset
с 2 календарными переменными (Week
& Hour
) и 1 Amount
переменная:
Week Hour Amount
35 1 367
35 2 912
36 1 813
36 2 482
37 1 112
37 2 155
35 1 182
35 2 912
36 1 551
36 2 928
37 1 125
37 2 676
I wi sh для замены каждого значения Amount
со средним значением для каждого наблюдения с той же парой неделя / час. Например, здесь есть 2 набл. для (Week=35
, Hour=1
), со значениями Amount
367
и 182
. Следовательно, в этом примере в 2 строках с (Week=35
, Hour=1
) следует заменить Amount
на mean(c(367,182)
. Окончательный результат должен быть:
Week Hour Amount
35 1 274.5
35 2 912.0
36 1 682.0
36 2 705.0
37 1 118.5
37 2 415.5
35 1 274.5
35 2 912.0
36 1 682.0
36 2 705.0
37 1 118.5
37 2 415.5
У меня есть следующий код, решающий эту проблему. Однако для полного набора данных с тысячами строк это очень медленно. Есть ли способ автоматически изменить форму с помощью этого парного средства?
dataset = data.frame(Week=c(35,35,36,36,37,37,35,35,36,36,37,37),
Hour = c(1,2,1,2,1,2,1,2,1,2,1,2),
Amount = c(367,912,813,482,112,155,182,912,551,928,125,676))
means <- reshape2::dcast(dataset, Week~Hour, value.var="Value", mean)
for (i in 1:nrow(dataset)) {
print(i)
dataset$Amount[i] <- means[means$Week==dataset$Week[i],which(colnames(means)==dataset$Hour[i])]
}