liud4 / rVMAP

Data Management code for VMAC-MAP study
Other
3 stars 0 forks source link

create a new function to add conversion variable #16

Closed omair-a-khan closed 5 years ago

omair-a-khan commented 5 years ago

This function should ask for which two epochs are being compared and add the conversion variable to the project data set.

omair-a-khan commented 5 years ago

reference code to help with writing the function:

mydat.cdr.temp <- mydat.long %>%
  clear_labels() %>%
  arrange(
    map.id, epoch
  ) %>%
  group_by(
    map.id
  ) %>%
  slice( # this keeps the last row in the group, aka the last available epoch
    n()
  ) %>%
  filter(
    epoch != 1
  ) %>%
  filter(
    !is.na(cdr.factor)
  ) %>%
  ungroup() %>%
  select(
    map.id, epoch, cdr.factor
  ) %>%
  rename(
    epoch.last = epoch,
    cdr.factor.last = cdr.factor
  ) %>%
  mutate(
    cdr.factor.last = as.numeric(as.character(cdr.factor.last))
  )

mydat <- mydat %>%
  dplyr::select(
    -cdr.factor
  ) %>%
  mutate(
    cdr.factor.base = as.numeric(as.character(cdr.factor.base))
  ) %>%
  left_join(
    mydat.cdr.temp[, c("map.id", "epoch.last", "cdr.factor.last")],
    by = "map.id"
  ) %>%
  mutate(
    cdr.conversion = case_when(
      diagnosis.factor.base %in% "Normal" ~ case_when(
        cdr.factor.last == cdr.factor.base ~ "Stable",
        cdr.factor.last > cdr.factor.base ~ "Conversion",
        cdr.factor.last < cdr.factor.base ~ "Reversion"
      ),
      diagnosis.factor.base %in% c("MCI", "Ambiguous At Risk") ~ case_when(
        cdr.factor.last == cdr.factor.base ~ "Stable",
        cdr.factor.last > cdr.factor.base ~ case_when(
          cdr.factor.base == 0 & cdr.factor.last == 0.5 ~ "Stable",
          TRUE ~ "Conversion"
        ),
        cdr.factor.last < cdr.factor.base ~ case_when(
          cdr.factor.base == 0.5 & cdr.factor.last == 0 ~ "Stable",
          TRUE ~ "Reversion"
        )
      ),
      TRUE ~ NA_character_
    )
  ) %>%
  mutate(
    cdr.conversion.factor = as.factor(cdr.conversion)
  ) %>% 
  select(
    map.id, epoch.base, epoch.last, diagnosis.factor.base, cdr.conversion.factor, cdr.conversion, cdr.factor.base, cdr.factor.last, everything()
  )