Создание фрейма данных с неровными столбцами (т. Е. Столбцами различной длины) немного сложнее, но вот попытка.Обратите внимание на использование оператора %$%
magrittr:
library(tidyverse)
df <- read.table(text = 'Dr1 Dr2 PatientID
Chris John 5
John Mike 24
Mike John 28', header = T)
list.per.dr <- df %>%
gather(doc, name, -PatientID) %>%
select(-doc) %$%
split(PatientID, name)
$Chris
[1] 5
$John
[1] 24 5 28
$Mike
[1] 28 24
Теперь у нас есть объект списка, в котором указаны пациенты, назначенные каждому врачу.Чтобы преобразовать это во фрейм данных, нам нужно выровнять их длины:
max_patients <- max(lengths(list.per.dr))
df.new <- list.per.dr %>%
lapply(function(x) c(x, rep(NA, max_patients - length(x)))) %>%
as.data.frame()
Chris John Mike
1 5 24 28
2 NA 5 24
3 NA 28 NA