У меня большой набор данных, содержащий идентификаторы животных и даты.В этом наборе данных есть две группы, но нет группирующей переменной, поэтому я должен экстраполировать, кто принадлежит к какой группе, основываясь на общих датах.
Фиктивные данные.
mydf<-data.frame(
Date=sort(rep(seq(as.Date("2012/1/1"),as.Date("2012/1/4"), length.out = 4),5)),
ID = c(1,2,3,4,5,5,6,7,8,9,1,2,3,4,5,6,7,8,9,10))
Другая проблема, с которой я сталкиваюсь, заключается в том, что время от времени идентификатор, принадлежащий группе 1, может появляться с датой, связанной с группой 2, что и отбрасывалось при каждой попытке.Я так далеко в группировке.
Мне нужен выход с идентификаторами и новым идентификатором группы, подобным этому
ID Group
1 1
2 1
3 1
4 1
5 1
6 2
7 2
8 2
9 2
10 2
1: 5 все они появляются вместе 1-го и 3-го, поэтому они могут быть одной группой,6:10 появляются на 2-й и 4-й и, вероятно, будут 2-й группы.
ИД 5 относится к группе 1, потому что, хотя он был замечен один раз на 2-м с ИД 6: 9, он наблюдался дважды на 1-м и 2-м 1: 4, поэтому он, скорее всего, относится к группе1.
Все мои попытки провалились.Кто-нибудь может предложить решение этой проблемы?
Заранее спасибо.
РЕДАКТИРОВАТЬ:
Я думал, что мы прибили решение, используя решение Джона kmeans (в комментариях ниже):
mydf_wide <- mydf %>%
select(ID, date) %>%
distinct(ID,date)%>% #
mutate(x = 1) %>%
spread(date, x, fill = 0)
mydf_wide$clusters <- mydf_wide %>%
kmeans(centers = 2) %>%
pluck("cluster")
но я 'На самом деле я нахожу метод kmeans не совсем правильным каждый раз.См. Ниже:
Группы, в которых определенные теги (ID) появляются в один и тот же день, довольно легко обнаружить на глаз.Есть две группы, одна находится в центре, а другая группа появляется с обеих сторон.Кластеризация должна быть вертикальной по общим датам, как в ответе Джона ниже, но она кластеризована по всему диапазону дат.(Извиняюсь за беспорядочные метки осей)
Метод k-средних работал в других группах, но он не всегда способен группировать по общим датам.Я думаю, что подход кластеризации является разумным, но мне было интересно, могут ли быть другие методы кластеризации, которые могут справиться лучше, чем kmeans?
В качестве альтернативы, может ли метод фильтрации помочь уменьшить любой фоновый шум и помочь более надежному подходу kmeans?
Опять же, очень благодарен за любые советы.
Приветствия.