【问题标题】:How to split/reorganize heterogeneous dataframe with two columns into a dataframe with three columns in RR如何在 RR 中将具有两列的异构数据帧拆分/重组为具有三列的数据帧
【发布时间】:2019-01-23 18:23:33
【问题描述】:

我正在尝试将包含两列的数据框重组为包含三列的数据框。问题如下:

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

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

【问题讨论】:

    标签: r dataframe heterogeneous


    【解决方案1】:

    这是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
    

    【讨论】:

    • 像魅力一样工作。非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2022-01-24
    • 2020-04-21
    • 2016-02-28
    • 2019-09-21
    • 1970-01-01
    • 2020-01-20
    相关资源
    最近更新 更多