Рабочий процесс, который я бы использовал: group_by
и summarize
для создания столбца суммы, затем pivot_wider
для разбивки по годам и, наконец, left_join
для объединения двух.
Примечание. Я создаю суммы, пока данные все еще находятся в «аккуратном» формате. Вы можете суммировать по строкам после поворота данных, но это будет более сложно (для меня, во всяком случае).
library(dplyr)
library(tidyr)
df_1 <- tribble(
~Year1,~LOST_REASON,~TotalLost,
2016, "" ,0,
2016, "Change in Business Strategy" ,31,
2016, "Data Issue" ,12,
2016, "Lack of Adoption" ,21,
2016, "Lack of Value" ,14,
2016, "Lost to Competition" ,20,
2017, "" ,0,
2017, "Change in Business Strategy" ,31,
2018, "Data Issue" ,12,
2019, "Lack of Adoption" ,21,
2020, "Lack of Value" ,14,
2020, "Lost to Competition" ,20
)
Sums <- df_1 %>% group_by(LOST_REASON) %>%
summarise(Sum=sum(TotalLost,na.rm = TRUE))
Sums
#> # A tibble: 6 x 2
#> LOST_REASON Sum
#> <chr> <dbl>
#> 1 "" 0
#> 2 "Change in Business Strategy" 62
#> 3 "Data Issue" 24
#> 4 "Lack of Adoption" 42
#> 5 "Lack of Value" 28
#> 6 "Lost to Competition" 40
df_2 <- df_1 %>% pivot_wider(id_cols="LOST_REASON",
names_from = "Year1",
values_from = "TotalLost") %>%
left_join(Sums)
#> Joining, by = "LOST_REASON"
df_2
#> # A tibble: 6 x 7
#> LOST_REASON `2016` `2017` `2018` `2019` `2020` Sum
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 "" 0 0 NA NA NA 0
#> 2 "Change in Business Strategy" 31 31 NA NA NA 62
#> 3 "Data Issue" 12 NA 12 NA NA 24
#> 4 "Lack of Adoption" 21 NA NA 21 NA 42
#> 5 "Lack of Value" 14 NA NA NA 14 28
#> 6 "Lost to Competition" 20 NA NA NA 20 40
Создано в 2020-04-23 с помощью пакета представительства (v0.3.0)