【问题标题】:Cluster Analysis - Finding Unique Users When Changing Info聚类分析 - 更改信息时查找唯一用户
【发布时间】:2021-09-07 04:26:04
【问题描述】:

要计算数据集中的唯一用户,可以使用以下代码:

library(tidyverse)
library(igraph)
        
graph.data.frame(dat) %>%
    components() %>%
    pluck(membership) %>%
    stack() %>%
    set_names(c('GRP', 'user_id')) %>%
    right_join(dat %>% mutate(user_id = as.factor(user_id)), by = c('user_id'))

我想知道是否有办法扩展/修改那段代码,所以我们可以对两个以上的字段执行相同的过程。例如,对于以下数据:

dat <- data.frame(user_id = c(101,102,102,103,103,106, 107, 111, 112),
                  phone_number = c(4030201, 4030201, 4030202, 4030202, 4030203, 4030204, 4030205, 4030203, 4030206),
                  email = c("a@gmail.com", "b@gmail.com", "c@gmail.com", "d@gmail.com", "e@gmail.com", "f@gmail.com", "g@gmail.com", "h@gmail.com", "a@gmail.com"))

关于如何修改超过 2 个字段的代码有什么想法吗?谢谢!

【问题讨论】:

    标签: r graph igraph


    【解决方案1】:

    你可以试试下面的igraph代码

    g1 <- graph_from_data_frame(dat[-3])
    g2 <- graph_from_data_frame(dat[-1])
    merge(
        dat,
        stack(membership(components(graph.union(g1, g2)))),
        by.x = "user_id",
        by.y = "ind",
        all.x = TRUE
    )
    

    给了

      user_id phone_number       email values
    1     101      4030201 a@gmail.com      1
    2     102      4030201 b@gmail.com      1
    3     102      4030202 c@gmail.com      1
    4     103      4030202 d@gmail.com      1
    5     103      4030203 e@gmail.com      1
    6     106      4030204 f@gmail.com      2
    7     107      4030205 g@gmail.com      3
    8     111      4030203 h@gmail.com      1
    9     112      4030206 a@gmail.com      1
    

    概括

    一般情况,即2列以上,可以试试

    g <- do.call(
        graph.union,
        apply(embed(seq(ncol(dat)), 2)[, 2:1], 1, function(v) graph_from_data_frame(dat[v]))
    )
    
    merge(
        dat,
        stack(membership(components(g))),
        by.x = "user_id",
        by.y = "ind",
        all.x = TRUE
    )
    

    【讨论】:

    • 太棒了,谢谢! graph.union 完成了这项工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多