Как разделить / реорганизовать неоднородный фрейм данных с двумя столбцами в фрейм данных с тремя столбцами в RR - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь реорганизовать мой фрейм данных с двумя столбцами в фрейм данных с тремя столбцами. Проблема выглядит задницей следующим образом:

В моем фрейме данных у меня есть два столбца: «Хирургия» Информация и «Дата» операции. В столбце «Хирургия» всегда указывается идентификационный номер пациента, за которым следуют различные номера, определяющие этапы операции (может быть от 1 до 6 этапов операции). Во втором столбце указана дата. Один ряд НС отделяет каждого пациента от следующего.

Surgery Date NA NA 798873 NA 8-136.10 2018-01-03 5-540.21 2018-01-03 5-555.2 2018-01-03 NA NA 797997 NA 1-453.1 2018-01-15 NA NA 799182 NA 5-540.21 2018-01-11 5-92B.X 2018-01-11

Как это должно выглядеть

Patient  Procedures    Date
798873   8-136.10      2018-01-03
798873   5-540.21      2018-01-03
798873   5-555.2       2018-01-03
797997   1-453.1       2018-01-15
799182   5-540.21      2018-01-11
799182   5-92B.X       2018-01-11

Любой гений знает, как решить эту проблему? Я потерян. Спасибо!

1 Ответ

0 голосов
/ 23 января 2019

Вот подход с tidyverse (с использованием функций dplyr и tidyr).

library(tidyverse)

# load data
df <- read.table(
  header = T,
  stringsAsFactors = F,
  text = "Surgery  Date
  NA       NA
  798873   NA
  8-136.10 2018-01-03
  5-540.21 2018-01-03
  5-555.2  2018-01-03
  NA       NA
  797997   NA
  1-453.1  2018-01-15
  NA       NA
  799182   NA
  5-540.21 2018-01-11
  5-92B.X  2018-01-11"
)

df2 <- df %>%
  # remove rows with blank in Surgery
  drop_na(Surgery) %>%
  # Add Patient column using Surgery where Date is blank
  mutate(Patient = if_else(is.na(Date), Surgery, NA_character_)) %>%
  # Fill Patient down into blank rows
  fill(Patient) %>%
  # Remove rows with blank Date
  drop_na(Date) %>%
  # Rename and sort columns
  select(Patient, Procedures = Surgery, Date)



> df2
  Patient Procedures       Date
2  798873   8-136.10 2018-01-03
3  798873   5-540.21 2018-01-03
4  798873    5-555.2 2018-01-03
6  797997    1-453.1 2018-01-15
8  799182   5-540.21 2018-01-11
9  799182    5-92B.X 2018-01-11
...