通过时间保持一致的群集ID

时间:2018-01-05 20:42:18

标签: r dplyr k-means

有时我们想知道点的聚类如何随时间变化。例如,假设您的城市具有十年的人口统计属性,并且您对哪些城市是最相似的"最相似的"基于他们每十年的属性。这是一个玩具数据集,说明了这一点:

set.seed(1)
centers <- data.frame(cluster=factor(1:3), 
                      size=c(100, 150, 50), 
                      x1=c(5, 0, -3), 
                      x2=c(-1, 1, -2))

year1 <- centers %>% 
  group_by(cluster) %>%
  do(data.frame(x1=rnorm(.$size[1], .$x1[1]),
                x2=rnorm(.$size[1], .$x2[1]),
                year="year 1",
                stringsAsFactors = F)) %>%
  data.frame()

year2 <- centers %>% 
  group_by(cluster) %>%
  do(data.frame(x1=rnorm(.$size[1], .$x1[1]),
                x2=rnorm(.$size[1], .$x2[1]),
                year="year 2",
                stringsAsFactors = F)) %>%
  data.frame()


points <- rbind(year1,year2)

我们可以使用以下内容计算每年的kmeans:

kclusters <- points %>%
  select(-cluster) %>%
  group_by(year) %>%
  do(data.frame(., kclust = kmeans(as.matrix(.[,-3]),centers=3)$cluster)) %>%
  mutate(kclust = as.character(kclust))

这是由此产生的情节:

ggplot(kclusters) + 
  geom_point(aes(x1,x2,color=kclust)) + 
  facet_wrap(~year) +
  theme_bw() +
  scale_color_viridis_d()

enter image description here

代码按预期工作,但请注意群集ID已更改。它在这里没有太大的区别,因为我正在使用原始的x1和x2绘制聚类,但我的真实例子是制作地图,并使用坐标在空间中绘制点并根据聚类(即位置)着色这一点永远不会改变)。想象一下这几年的情节 - 每年跟踪各个点的集群成员资格变得很难。有没有办法保持ID一致?

0 个答案:

没有答案