R: Отслеживание химиотерапии, взятия и сброса (используя накопление, уменьшение или какой-либо другой подход) - PullRequest
0 голосов
/ 15 января 2019

Необходимо отслеживать, какие пациенты химиотерапии принимают, принимали и бросают. Помогает с проверкой правильности кодирования схем химиотерапии.

Ниже приведены некоторые примеры данных. Набор данных «есть», который показывает, что у меня есть, и набор данных «нужны», который показывает, чего я пытаюсь достичь. Идея заключается в том, что названия лекарств будут добавляться / удаляться из рабочего списка на основе значения переменной изменения. Например, с помощью переменной «on» названия лекарств будут добавлены в текущий список при изменении = 1 и удалены из рабочего списка при изменении = -1.

Я думал, что это можно сделать с помощью функции накопления из пакета мурлыкания или уменьшения (накопления = ИСТИНА). Насколько я понимаю, эти функции сократят длинный список до более короткого путем повторного применения функции, которая сводит пару значений к одному значению.

Я пытался включить такие функции, как paste или str_remove (из пакета stringr) в накопление / уменьшение, и это прекрасно работает. Проблема в том, что в зависимости от значения изменения, иногда я хочу вставить, а иногда я хочу str_remove, а иногда я хочу оставить список как есть. Я пытался написать функцию, которая применяет различные функции в зависимости от значения изменения, но это не очень хорошо.

Как я могу заставить R делать то, что мне нужно?

Спасибо

Пол

#### Have data ####

have <- structure(
list(
  PTNO = structure(
    c(86319, 86319, 86319, 86319,
      86319, 86319, 86319, 86319),
    format.sas = "BEST"
  ),
  line = c(1, 1, 1, 1, 1, 1, 1, 1),
  change = c(1, 1,-1,-1, 1, 1,-1,-1),
  date = structure(
    c(16751, 16751, 16764, 16764, 16815, 16815,
      16836, 16836),
    class = "Date",
    format.sas = "MMDDYY"
  ),
  drug = c(
    "carboplatin",
    "cetuximab",
    "carboplatin",
    "cetuximab",
    "carboplatin",
    "cetuximab",
    "carboplatin",
    "cetuximab"
  )
),
class = c("tbl_df", "tbl", "data.frame"),
row.names = c(NA,-8L))

#### Need data ####

need <- structure(
list(
  PTNO = structure(
    c(86319, 86319, 86319, 86319,
      86319, 86319, 86319, 86319),
    format.sas = "BEST"
  ),
  line = c(1, 1, 1, 1, 1, 1, 1, 1),
  change = c(1, 1,-1,-1, 1, 1,-1,-1),
  date = structure(
    c(16751, 16751, 16764, 16764, 16815, 16815, 16836, 16836),
    class = "Date",
    format.sas = "MMDDYY"
  ),
  drug = c(
    "carboplatin",
    "cetuximab",
    "carboplatin",
    "cetuximab",
    "carboplatin",
    "cetuximab",
    "carboplatin",
    "cetuximab"
  ),
  on = c(
    "carboplatin",
    "carboplatin, cetuximab",
    "cetuximab",
    "",
    "carboplatin",
    "carboplatin, cetuximab",
    "cetuximab",
    ""
  ),
  taken = c(
    "carboplatin",
    "carboplatin, cetuximab",
    "carboplatin, cetuximab",
    "carboplatin, cetuximab",
    "carboplatin, cetuximab, carboplatin",
    "carboplatin, cetuximab, carboplatin, cetuximab",
    "carboplatin, cetuximab, carboplatin, cetuximab",
    "carboplatin, cetuximab, carboplatin, cetuximab"
  ),
  dropped = c(
    "",
    "",
    "carboplatin",
    "carboplatin, cetuximab",
    "carboplatin, cetuximab",
    "carboplatin, cetuximab",
    "carboplatin, cetuximab, carboplatin",
    "carboplatin, cetuximab, carboplatin, cetuximab"
  )
),
row.names = c(NA,-8L),
class = c("tbl_df", "tbl", "data.frame"))
...