Skip to content

Commit

Permalink
fix: update create duplicates
Browse files Browse the repository at this point in the history
  • Loading branch information
Spinner committed Jan 28, 2025
1 parent f92ffd7 commit 0b3d38e
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 21 deletions.
43 changes: 23 additions & 20 deletions R/create_duplicates.R
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
#'
#' @export
create_duplicates <- function(conc_data,
groups = c("USUBJID", "ANALYTE", "PCSPEC"),
groups = slopes_groups(),
dosno = "DOSNO",
arrlt = "ARRLT",
afrlt = "AFRLT",
Expand All @@ -37,59 +37,62 @@ create_duplicates <- function(conc_data,

# Step 1: Identify the dosing times (ARRLT == 0)
dose_times <- conc_data %>%
mutate(dose_time = .data[[afrlt]] - .data[[arrlt]]) %>%
select(all_of(groups), .data[[dosno]], dose_time) %>%
group_keys(c(groups, dosno)) %>%
summarize(dose_time = first(dose_time), .groups = "drop")
mutate(dose_time = .data[[afrlt]] - .data[[arrlt]],
nom_dose_time = .data[[nfrlt]] - .data[[nrrlt]]) %>%
select(all_of(groups), dose_time, nom_dose_time) %>%
group_keys(c(groups)) %>%
summarize(dose_time = first(dose_time),
nom_dose_time = first(nom_dose_time),
.groups = "drop")

# Step 2: Calculate dosing intervals
dosing_intervals <- dose_times %>%
group_keys(groups) %>%
mutate(
interval_next = lead(dose_time) - dose_time,
interval_prev = dose_time - lag(dose_time),
interval_next = replace_na(interval_next, 0),
interval_prev = replace_na(interval_prev, 0),
next_dose = interval_next + dose_time
nom_interval_prev = nom_dose_time - lag(nom_dose_time),
nom_interval_prev = replace_na(nom_interval_prev, 0),
) %>%
ungroup()

# Step 3: Duplicate predose values for the previous dose

# Step 3: Duplicate predose values to be clast for the previous dose
predose_duplicates <- conc_data %>%
filter(.data[[arrlt]] <= 0, .data[[dosno]] > 1) %>%
left_join(dosing_intervals, by = c(dosno, groups)) %>%
left_join(dosing_intervals, by = c(groups)) %>%
mutate(
!!dosno := .data[[dosno]] - 1,
!!arrlt := .data[[arrlt]] + interval_prev,
!!nrrlt := .data[[nfrlt]] - interval_prev
!!nrrlt := .data[[nrrlt]] + nom_interval_prev
) %>%
select(-interval_next, -interval_prev)
select(-interval_prev, -nom_interval_prev)

# Step 4: Identify missing predose values for the next dose
missing_predose <- dose_times %>%
anti_join(
conc_data %>% filter(.data[[arrlt]] < 0),
by = c(groups, dosno)
by = c(groups)
)

# Step 5: Duplicate last value of the previous dose
# Step 5: Duplicate last value of the previous dose to become predose of next
last_values <- conc_data %>%
semi_join(missing_predose, by = c(groups, dosno)) %>%
group_keys(c(groups, dosno)) %>%
semi_join(missing_predose, by = c(groups)) %>%
group_keys(c(groups)) %>%
slice_tail(n = 1) %>%
ungroup() %>%
left_join(dosing_intervals, by = c(groups, dosno)) %>%
left_join(dosing_intervals, by = c(groups)) %>%
mutate(
!!dosno := .data[[dosno]] + 1,
!!arrlt := .data[[arrlt]] - interval_prev,
!!nrrlt := .data[[nrrlt]] + interval_prev
!!nrrlt := .data[[nrrlt]] - nom_interval_prev
) %>%
select(-interval_next, -interval_prev)
select(-interval_prev, -nom_interval_prev)

# Step 6: Combine all data
conc_data <- conc_data %>%
bind_rows(predose_duplicates, last_values) %>%
arrange(across(all_of(c(groups, dosno, arrlt))))
arrange(across(all_of(c(groups, arrlt))))

return(conc_data)
}
2 changes: 1 addition & 1 deletion R/lambda_slope_plot.R
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ lambda_slope_plot <- function(
) {

#Create duplicates for predose and last dose points per profile
conc_pknca_df <- create_duplicates(conc_pknca_df)
conc_pknca_df <- create_duplicates(conc_pknca_df, column_names)

#Obtain values for slopes selection
lambda_res <- res_pknca_df %>%
Expand Down

0 comments on commit 0b3d38e

Please sign in to comment.