我一直在处理一个数据集,该数据集带有表示缺失的变量:
> 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变量并将left_join子集放入原始变量中。但是,这产生了一个问题,我需要将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),.))
答案 0 :(得分:0)
<?xml version="1.0"?>
<Org>
<Department name="Environmental">
<Division>Engineering</Division>
<Address>123 Elm Street</Address>
</Department>
</Org>
提供了一些不错的语义功能,但是我不觉得强迫做一些不必要的事情。这是一个完全依赖基本功能的解决方案。您可以根据需要转换回dplyr
语法:
dplyr
由reprex package(v0.2.1)于2019-02-27创建