我正在尝试将具有两个列的数据框重组为具有三列的数据框。该问题看起来如下:
在我的数据框中,我有两列:“手术”信息和“手术日期”。在“手术”列中,始终有患者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
外面有任何天才知道该如何解决?我迷路了。 谢谢!
答案 0 :(得分:0)
这是使用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