У меня есть относительно большой файл данных, который выглядит как (а), и мне нужно создать структуру вроде (б).Таким образом, мне нужно вычислить сумму значений Amount times Coeficient для каждого идентификатора и каждого года.
Я быстро что-то взломал, используя вложенные циклы for, ноэто, конечно, ужасно неэффективно:
library(tidyverse)
data <- tibble(
id=c("A", "B", "C", "A", "A", "B", "C"),
year=c(2002,2002,2004,2002,2003,2003,2005),
amount=c(1000,1500,1000,500,1000,1000,500),
coef=rep(0.5,7)
)
years <- sort(unique(data$year))
ids <- unique(data$id)
result <- matrix(0,length(ids),length(years)) %>%
as.tibble() %>% setNames(., years)
for (i in seq_along(ids)){
for (j in seq_along(years)){
d <- filter(data, id==ids[i] & year== years[j])
if (nrow(d)!=0){
result[i,j] <- sum(d$amount*d$coef)
}
}
}
result <- add_column(result, ID=ids, .before = 1)
Мне было интересно, как можно решить эту проблему эффективно, используя map()
, group_by()
или любые другие функции обратного хода.
Заранее благодарим за полезные советы.