Проверьте, есть ли пропущенные даты в определенном интервале времени - PullRequest
0 голосов
/ 17 мая 2018

Следующий набор данных:

 Name   Year   more columns
 A      2000
 A      2001
 A      2002
 A      2003
 B      2000
 B      2001
 B      2003
 C      2001
 C      2002
 ....

library(data.table)
DT = rbind(use.names = FALSE, 
  data.table(Name = "A", Year = (y <- 2000:2003)), 
  data.table("B", y[-3]), 
  data.table("C", y[-c(1,4)]))

Я хочу получить все значения из моего имени столбца, в которых хотя бы один пропущенный год между 2000-2003 гг. Поэтому в этом примере я хочу получить следующие значения из названия моего столбца. B потому что 2002 отсутствует, а C потому что 2000 отсутствует. Я хочу проверить, отсутствуют ли какие-либо годы между 2000-2003 годами для всех моих значений в столбце Имя.

Есть ли простой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Другая возможность состоит в том, чтобы использовать анти-объединение против перекрестного объединения всех возможных комбинаций:

library(data.table)
DT[, CJ(Name = Name, Year = Year, unique = TRUE)][!DT, on = .(Name, Year)]
   Name Year
1:    B 2002
2:    C 2000
3:    C 2003

Это покажет недостающие элементы.

0 голосов
/ 17 мая 2018

Вот простой способ использования базы R:

aggregate(Year ~ Name, df, FUN = function(x) all(2000:2003 %in% x))

  Name  Year
1    A  TRUE
2    B FALSE
3    C FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...