Различаться в каждом подмножестве столбца фрейма данных - PullRequest
2 голосов
/ 22 февраля 2020

У меня есть фрейм данных с идентификатором, годом и месяцем. Мне нужно сгруппировать по годам и месяцам и получить уникальные идентификаторы из этой группы. Я хочу сравнить уникальные идентификаторы с предыдущим годом, группой по месяцам, сколько идентификаторов было добавлено и сколько вычтено.

Вид съемки в темноте, но я попробовал следующее, не работает:

connections <- df %>%
  group_by(year, month) %>%
  arrange(year, month) %>%
  diff_data(unique(as.vector(~ID)), lag(unique(as.vector(~ID))))

Пример данных

df <- data.frame(ID=c("A1", "A2", "A3", "A1", "A2","A4", "A1", "A4", "A5"),
year= c(2010, 2010, 2010, 2011, 2011, 2011, 2012, 2012, 2012), 
month= c(1, 2, 3, 1, 2, 3, 1, 2, 3))

Требуемый выход

1 Ответ

0 голосов
/ 22 февраля 2020

Первый будет делать aggregate как месяц, так и год. При таком подходе список всех идентификаторов добавляется и удаляется каждый месяц, и получается length, чтобы подсчитать, сколько добавляется и удаляется каждый месяц.

library(tidyverse)

df %>%
  aggregate(ID ~ year + month, ., unique, drop = FALSE) %>%
  group_by(month) %>%
  arrange(year) %>%
  mutate(addedID = mapply(setdiff, ID, lag(ID), SIMPLIFY = FALSE),
         num_addedID = lapply(addedID, length),
         deletedID = mapply(setdiff, lag(ID), ID, SIMPLIFY = FALSE),
         num_deletedID = lapply(deletedID, function(x) length(na.omit(x)))) %>%
  ungroup() %>%
  arrange(month, year) %>%
  as.data.frame()

Вывод

  year month ID addedID num_addedID deletedID num_deletedID
1 2010     1 A1      A1           1        NA             0
2 2011     1 A1                   0                       0
3 2012     1 A1                   0                       0
4 2010     2 A3      A3           1        NA             0
5 2011     2 A2      A2           1        A3             1
6 2012     2 A4      A4           1        A2             1
7 2010     3 A3      A3           1        NA             0
8 2011     3 A4      A4           1        A3             1
9 2012     3 A5      A5           1        A4             1

Данные

df <- data.frame(ID=c("A1", "A3", "A3", "A1", "A2","A4", "A1", "A4", "A5"),
                 year= c(2010, 2010, 2010, 2011, 2011, 2011, 2012, 2012, 2012), 
                 month= c(1, 2, 3, 1, 2, 3, 1, 2, 3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...