Определите переменную, которая будет отбрасываться среди дубликатов идентификаторов в data.table - PullRequest
2 голосов
/ 05 августа 2020

У меня есть следующий набор данных

DT <- data.table(
      id = c(1,2,3,4,4,5,6,6,7),
      date  = c("2013-11-22","2017-01-24","2020-02-10","2011-01-03"
               ,"2011-01-03","2012-04-03","2010-09-03","2010-09-03"
               ,"2010-05-03"),                         
      status = c("Never","Current","Former",NA,"Former"
                , NA,"Never","Former","Current")
     )

Я хочу создать уникальный id и удалить дубликаты.

  • Строка id, которую следует сохранить, зависит от на status.
  • Если у staus есть NA, а не NA, я хочу сохранить наблюдение без NA.
  • Если статус имеет Former и Never, я хочу сохранить наблюдение Former.

Пример вывода ниже:

    id  date      status 
1:  1 2013-11-22   Never 
2:  2 2017-01-24 Current 
3:  3 2020-02-10  Former 
4:  4 2011-01-03  Former 
5:  5 2012-04-03    <NA> 
6:  6 2010-09-03  Former 
7:  7 2010-05-03 Current

Исходный набор данных имеет больше строк и столбцов, и функция data.table будет эффективное время. Также некоторые id встречаются более одного раза. Я пробовал раньше, чтобы сохранить id с последней датой. Но чем, у меня слишком много "NA", в которых была другая запись статуса для более ранней даты.

Как я могу определить для идентичных id, какие status следует сохранить?

1 Ответ

3 голосов
/ 05 августа 2020

Мы могли бы создать factor с status, указав levels, использовать его для order вместе с 'id' и получить unique по 'id'

library(data.table)
unique(DT[order(id, ordered(status, c("Former", "Current", "Never")))], by = 'id')
...