gpt4 book ai didi

r - 相互测试所有值并从结果矩阵形成组

转载 作者:行者123 更新时间:2023-12-04 11:18:44 24 4
gpt4 key购买 nike

我觉得好像我问错了问题并试图重新发明轮子。我错过了什么?

我有一堆值,比如说 8,我需要相互测试。我构建了一个函数,该函数返回一个矩阵,说明任何两个值是否在一个组中。由于缺乏更好的主意,让我将输出粘贴到此处:

    data.text <- 
"1 2 3 4 5 6 7 8
1 TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
2 TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
3 TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
4 FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
5 FALSE FALSE FALSE FALSE TRUE TRUE NA FALSE
6 FALSE FALSE FALSE FALSE TRUE TRUE NA FALSE
7 FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
8 FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE"

data <- read.table(text=data.text, header = TRUE)
data <- as.matrix(data)
colnames(data) <- 1:8

因此,第 1 行表示值 1 与它自己(第 1 列)以及值 2 和 3 处于一个组中,但不与值 4 - 8 处于同一组中。值 5 和 6 也在同一组中。

我正在尝试使用此信息来创建单个组 ID 和该组中所有元素的向量:
  • Group1: 1,2,3
  • Group2:5,6

  • 到目前为止我所做的:
    # row and column index for all TRUE values by row
    groups <- which(data,arr.ind = T)

    # sort each row in acending order in order to find duplicate values
    groups.sorted <- t(apply(groups,1,sort))

    # drop double statments ("1 and 2", "2 and 1")
    groups.unique <- unique(groups.sorted)

    # drop obivous information ("1 and 1")
    groups.real <- groups.unique[groups.unique[,1] != groups.unique[,2],]

    在这一点上,我被困住了。如何自动处理第 1、2 和 3 行属于同一组的事实?

    总而言之,我觉得我在这方面做得相当笨拙。有人可以指出我更优雅的方式吗?

    最佳答案

    我会使用 igraph 包来处理这类事情:

    require(igraph)
    components(graph_from_adjacency_matrix(data))$membership
    #1 2 3 4 5 6 7 8
    #1 1 1 2 3 3 4 5

    您将获得一个命名向量,其名称是元素,值是它们所属的组。

    关于r - 相互测试所有值并从结果矩阵形成组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34286598/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com