【发布时间】:2018-07-13 11:59:24
【问题描述】:
我想在组内执行kmeans 并向我的数据中添加关于观察被分配到的集群编号和中心的信息(仍然在组内,因此集群 1 对于组 A 和组 B 不同)。我认为我可以 pluck 集群分配和来自 kmeans 的质心,然后可能将这两者相互连接,最后使用原始数据。要做到前者,我想向具有中心的数据帧添加一个行号,然后按集群数加入。但是如何在嵌套数据框中添加行号?以下代码在最后一个“嵌套”mutate 之前运行良好。
my_data <- data.frame(group = c(sample(c('A', 'B', 'C'), 20, replace = TRUE)), x = runif(100, 0, 10), y = runif(100, 0, 10))
my_data %>%
group_by(group) %>%
nest() %>%
mutate(km_cluster = map(data, ~kmeans(.x, 3) %>% pluck('cluster')),
km_centers = map(data, ~kmeans(.x, 3) %>% pluck('centers') %>% mutate(cluster = row_number())))
@Luke.sonnet 提供的答案适用于 map,但有趣的是不适用于 map2,见下文:
my_data %>%
group_by(group) %>%
nest() %>%
mutate(number = sample(3:7, 3)) %>%
mutate(km_cluster = map2(data, number, ~kmeans(.x, .y) %>% pluck('cluster')),
km_centers = map2(data, number, ~kmeans(.x, .y) %>% pluck('centers') %>% as_tibble() %>% mutate(cluster = row_number())))
任何想法如何解决这种情况下的问题?同样重要的是,这种行为的原因是什么?
【问题讨论】: