0

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

在我的数据框中,我有两列:“手术”信息和“手术日期”。在“手术”列中,总是有患者 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

有哪位天才知道如何解决这个问题吗?我搞不清楚了。谢谢!

4

1 回答 1

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
于 2019-01-23T18:42:48.677 回答