如何在RR

时间:2019-01-23 18:23:34

标签: r dataframe heterogeneous

我正在尝试将具有两个列的数据框重组为具有三列的数据框。该问题看起来如下:

在我的数据框中,我有两列:“手术”信息和“手术日期”。在“手术”列中,始终有患者ID号,其后是定义手术步骤的不同编号(可以是1-6个手术步骤)。第二列是日期。一行NA将每个患者与下一个分开。

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 :(得分:0)

这是使用tidyverse(使用dplyrtidyr函数的方法)。

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