Показать значение перед конкретным полем на основе даты - PullRequest
2 голосов
/ 23 сентября 2019

Ниже приведен набор данных с подмножеством, мне было интересно, как мне поступить с каждым набором идентификаторов и отсортировать его по самым ранним или самым поздним датам, создать новый столбец, в котором будет указана строка перед статусом «LTD»?Цель состоит в том, чтобы идентифицировать диагноз или строку перед достижением статуса «LTD» для этого уникального идентификатора.Заранее спасибо!

Набор данных:

id <- c(123,123,123,123,123,321,321)
diag <- c("injury1", "injury2" , "cancer","injury4","cancer", "injury5", "cancer")
date <- as.Date(c('2008-11-1','2009-3-25','2010-3-14',"2010-10-14","2010-11-14", '2015-3-14', '2015-4-15'))
status <- (c("STD", "STD", "LTD", "STD","LTD","STD", "LTD"))

data <- data.frame(id, diag, date, status)

Результат (N для нет, Y для да):

123 injury1 2008-11-01  STD   N
123 injury2 2009-03-25  STD   Y
123 cancer  2010-03-14  LTD   NA
123 injury4 2010-10-14  STD   Y
123 Cancer  2010-11-14  LTD   NA
321 injury5 2015-03-14  STD   Y
321 cancer  2015-04-15  LTD   NA

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Использование by() и пошаговое назначение.

do.call(rbind, by(data[order(data$date), ], data$id, function(x) {
  x$diag <- "N"
  x$diag[which(x$status == "LTD") - 1] <- "Y"
  x$diag[x$status == "LTD"] <- NA
  return(x[c(1, 3:4, 2)])
}))
#        id       date status diag
# 123.1 123 2008-11-01    STD    N
# 123.2 123 2009-03-25    STD    Y
# 123.3 123 2010-03-14    LTD <NA>
# 123.4 123 2010-10-14    STD    Y
# 123.5 123 2010-11-14    LTD <NA>
# 321.6 321 2015-03-14    STD    Y
# 321.7 321 2015-04-15    LTD <NA>
2 голосов
/ 23 сентября 2019

Мы можем преобразовать дату в объект даты arrange на date, group_by id и использовать case_when в зависимости от условий.

library(dplyr)

data %>%
  mutate(date = as.Date(date)) %>%
  arrange(date) %>%
  group_by(id) %>%
  mutate(result = case_when(lead(status == "LTD") ~"Y", 
                            status == "LTD" ~ NA_character_, 
                            TRUE~ "N"))

#    id   diag    date     status result
#   <dbl> <fct>   <date>   <fct>  <chr> 
#1   123 injury1 2008-11-01 STD    N     
#2   123 injury2 2009-03-25 STD    Y     
#3   123 cancer  2010-03-14 LTD    NA    
#4   123 injury4 2010-10-14 STD    Y     
#5   123 cancer  2010-11-14 LTD    NA    
#6   321 injury5 2015-03-14 STD    Y     
#7   321 cancer  2015-04-15 LTD    NA    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...