упорядочить данные столбца в R - PullRequest
0 голосов
/ 03 сентября 2018

Мой набор данных выглядит следующим образом

ID     Diagnosis date    Procedure date
1      2005-09-09        2008-04-09
1      2006-05-09        2007-08-08
2      2007-07-02        2007-08-01
2      2007-07-02        2009-08-05
2      2008-05-8         2007-08-10

Я хочу сгруппировать свои данные, как показано ниже

ID      Diagnosis date     Procedure date
1       2005-09-09         2007-08-08
        2006-05-09         2008-04-09
2       2007-07-02         2007-08-01
                           2007-07-10
        2008-05-08         2009-08-05

В основном дата процедуры должна быть после даты диагностики

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Надеюсь, что следующий код решит:

library(dplyr)
data <- data.frame(ID =  c(1,1,2,2,2), Diagnosis = c("2005-09-09","2006-05-09","2007-07-02","2007-07-02","2008-05-08"),
                   Procedure =  c("2008-04-09","2007-08-08","2007-08-01","2009-08-05","2007-08-10"))

data$Diagnosis <- as.Date(data$Diagnosis)
data$Procedure <- as.Date(data$Procedure)


data1 <- data[,-2] %>%
  group_by(ID) %>%
  arrange( ID,Procedure)
out <- data.frame(data1,data[2])
out <- out[,c(1,3,2)]
out

ID  Diagnosis  Procedure
1  1 2005-09-09 2007-08-08
2  1 2006-05-09 2008-04-09
3  2 2007-07-02 2007-08-01
4  2 2007-07-02 2007-08-10
5  2 2008-05-08 2009-08-05
0 голосов
/ 03 сентября 2018

Как насчет этого решения. Некоторые примеры данных:

dat <- read.table(header=TRUE, stringsAsFactors=FALSE, text='
ID     Diagnosis         Procedure
1      2005-09-09        2008-04-09
1      2006-05-09        2007-08-08
2      2007-07-02        2007-08-01
2      2007-07-02        2009-08-05
2      2008-05-08        2007-08-10')

Конвертируйте их в Date объекты. (Поскольку строки хорошо отформатированы, это может сработать просто без преобразования их в даты. Я думаю, это моя привычка делать из них «правильный объект даты».)

dat$Diagnosis <- as.Date(dat$Diagnosis)
dat$Procedure <- as.Date(dat$Procedure)

min возвращает одно минимальное значение для вектора. pmin возвращает попарные минимумы между векторами:

min(c(1,1,3,4), c(2,2,4,3))
# [1] 1
pmin(c(1,1,3,4), c(2,2,4,3))
# [1] 1 1 3 3

Мы можем использовать это для сравнения двух столбцов:

tmp1 <- pmin(dat$Diagnosis, dat$Procedure)
tmp2 <- pmax(dat$Diagnosis, dat$Procedure)

и сохраните их на месте:

dat$Diagnosis <- tmp1
dat$Procedure <- tmp2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...