Это мой пример набора данных
sample <- structure(list(Week = c(1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2),
Project = c("A", "A", "A", "A", "B", "B", "B", "B", "C", "C", "C", "A", "A", "A" ),
Status= c( "Active","Rescheduled","Active", "Cancelled", "Active", "Cancelled", "Cancelled",
"Rescheduled", "Active", "Active", "Rescheduled", "Cancelled", "Cancelled", "Active")),
.Names = c("Week","Project","Status"),
class = "data.frame" , row.names = c(NA, -14L))
> sample
Week Project Status
1 1 A Active
2 1 A Rescheduled
3 1 A Active
4 1 A Cancelled
5 1 B Active
6 1 B Cancelled
7 1 B Cancelled
8 1 B Rescheduled
9 2 C Active
10 2 C Active
11 2 C Rescheduled
12 2 A Cancelled
13 2 A Cancelled
14 2 A Active
и я хочу создать фрейм данных, который вычисляет активную скорость каждой программы и 1-активную ставку (= неактивную ставку) по неделям со значениями «NA».
Таким образом, таблица будет выглядеть так
Week A_active_rate A_Non_active_rate B_active_rate B_Non_active_rate C_active_rate C_Non_active_rate
1 1 0.50 0.50 0.25 0.75 NA NA
2 2 0.33 0.67 NA NA 0.67 0.33
Вот один из подходов:
library(tidyverse)
sample <- structure(list(Week = c(1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2),
Project = c("A", "A", "A", "A", "B", "B", "B", "B", "C", "C", "C", "A", "A", "A" ),
Status= c( "Active","Rescheduled","Active", "Cancelled", "Active", "Cancelled", "Cancelled",
"Rescheduled", "Active", "Active", "Rescheduled", "Cancelled", "Cancelled", "Active")),
.Names = c("Week","Project","Status"),
class = "data.frame" , row.names = c(NA, -14L))
sample %>%
mutate(active_or_not = ifelse(Status == "Active", "Active", "Non_Active")) %>%
mutate(count = n(), .by = c(Week, Project, active_or_not)) %>%
mutate(perc = count / n(), .by = c(Week, Project)) %>%
pivot_wider(names_from = c(Project, active_or_not),
id_cols = Week,
values_from = perc,
values_fn = mean,
values_fill = NA,
names_glue = "{.name}_rate")
#> # A tibble: 2 × 7
#> Week A_Active_rate A_Non_Active_rate B_Active_rate B_Non_Active_rate
#> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1 0.5 0.5 0.25 0.75
#> 2 2 0.333 0.667 NA NA
#> # ℹ 2 more variables: C_Active_rate <dbl>, C_Non_Active_rate <dbl>
Created on 2024-04-11 with reprex v2.1.0
Еще один подход tidyverse:
library(dplyr)
library(tidyr)
sample %>%
summarize(
active_rate = mean(Status == "Active"),
Non_active_rate = 1 - active_rate,
.by = c(Week, Project)
) %>%
pivot_wider(
names_from = Project,
values_from = active_rate:Non_active_rate,
names_glue = "{Project}_{.value}",
names_vary = "slowest"
)
# # A tibble: 2 × 7
# Week A_active_rate A_Non_active_rate B_active_rate B_Non_active_rate C_active_rate C_Non_active_rate
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1 0.5 0.5 0.25 0.75 NA NA
# 2 2 0.333 0.667 NA NA 0.667 0.333
Я запустил библиотеку rlang, но все равно получаю сообщение об ошибке: Ошибка в chr_as_locations()
: ! Невозможно создать подгруппы несуществующих столбцов. ✖ Колонка Project
не существует. Запустите rlang::last_trace()
, чтобы увидеть, где произошла ошибка.
Какое отношение к чему-либо имеет rlang? Этот код отлично работает для меня с данными вашего примера. Не могли бы вы отредактировать свое сообщение, включив в него данные, которые вызывают ошибку? Поскольку ошибка говорит о том, что столбец Project
не существует, подтвердили ли вы, что этот столбец существует в ваших данных?
Почему я получаю эту ошибку? Спасибо; > образец %>% + dplyr::summarise( + active_rate = mean(Status == "Active"), + Non_active_rate = 1 - active_rate, + .by = c(Week, Project) + ) %>% + tidyr:: Pivot_wider( + Names_from = Project, + Values_from = active_rate:Non_active_rate, + Names_glue = "{Project}_{.value}", + Names_vary = "slowest" + ) Ошибка в
chr_as_locations()
: ! Невозможно создать подгруппы несуществующих столбцов. ✖ КолонкаProject
не существует. Запуститеrlang::last_trace()
, чтобы увидеть, где произошла ошибка.