Я работал в наборе данных с переменными, которые представляют пропуски:
> dt %>%
+ as_tibble()
# A tibble: 652 x 5
z_pos_2grp z_neg_2grp z_dis_2grp z_iq_2grp condit
<dbl> <dbl> <dbl> <dbl> <chr>
1 NA NA NA NA 2
2 NA NA NA NA 2
3 -0.0828 0.328 -0.473 -1.23 1
4 0.260 0.328 -0.222 -0.441 1
5 NA NA NA NA 2
6 -0.769 -0.943 -0.725 0.607 3
7 NA NA NA NA NA
8 NA NA NA NA 5
9 -0.769 -0.943 -0.473 2.44 3
10 -0.769 -0.943 -0.725 0.607 3
Я хотел выполнить кластеризацию без данных в этих данных, что означает, что мне нужно изолировать переменные, которые меня интересуют в кластеризации(z_pos_2grp, z_neg_2grp, z_dis_2grp, z_iq_2grp) и удалите NA.Итак, я выполнил:
dt %>%
select(z_pos_2grp, z_neg_2grp, z_dis_2grp, z_iq_2grp) %>%
filter(!is.na(z_pos_2grp) & !is.na(z_neg_2grp) & !is.na(z_dis_2grp) & !is.na(z_iq_2grp)) %>%
do(augment(kmeans(cbind(.$z_pos_2grp, .$z_neg_2grp, .$z_dis_2grp, .$z_iq_2grp), nstart = 1000, centers = 3),.))
Это приводит к желаемым результатам, создается новый столбец с кластером kmeans, однако я хотел расширить этот столбец до исходного набора данных.Таким образом, номера кластеров находятся в правильных строках, а NA остаются без значения для номера кластера.
ОБНОВЛЕНИЕ
Как предлагается в комментариях, я создал переменную rowid и оставил в подмножестве оригинал.Это, однако, создает проблему, мне нужно передать переменную rowid в процедуру kmeans, которая не является идеальной.Как это можно решить?Возможно, есть чистое решение для dplyr.Смотрите ниже код:
ided <- dt %>%
as_tibble() %>%
tibble::rowid_to_column("rowid")
with_clusters<- ided %>%
as_tibble() %>%
select(rowid, z_pos_2grp, z_neg_2grp, z_dis_2grp, z_iq_2grp) %>%
filter(!is.na(z_pos_2grp) & !is.na(z_neg_2grp) & !is.na(z_dis_2grp) & !is.na(z_iq_2grp)) %>%
do(augment(kmeans(cbind(.$z_pos_2grp, .$z_neg_2grp, .$z_dis_2grp, .$z_iq_2grp), nstart = 1000, centers = 3),.))