【问题标题】:Convert Two column data frame to occurrence matrix using R使用 R 将两列数据框转换为出现矩阵
【发布时间】:2017-05-12 13:03:03
【问题描述】:

我有一个 csv 文件,其中包含以下格式的数据

A   a
A   b
B   f
B   g
B   e
B   h
C   d
C   e
C   f

第一列包含项目第二列包含来自特征向量的可用特征=[a,b,c,d,e,f,g,h] 我想将其转换为如下所示的出现矩阵

    a,b,c,d,e,f,g,h
A   1,1,0,0,0,0,0,0
B   0,0,0,0,1,1,1,1
C   0,0,0,1,1,1,0,0

我知道如何使用来自 Convert Two column data frame to occurrence matrix in pandas 的 pandas 来做到这一点。谁能告诉我如何使用 R 来做到这一点。

【问题讨论】:

    标签: r matrix dataframe


    【解决方案1】:

    将您的 csv 文件读入数据框,例如 dat。现在做

    o <- table(dat)
    

    请注意,这将为您提供一个列联表。如果出现多次,即矩阵中的值大于 1,则需要额外的后处理:

    o <- (o > 0) + 0
    

    对于您的示例数据,第二列中没有"c"。要将其显示在结果矩阵中,请控制因子级别:

    dat[[2]] <- factor(dat[[2]], levels = letters[1:8])
    

    然后做上面的。

    【讨论】:

    • (o &gt; 0) + 0 后处理有什么作用?当我尝试将表格转换为数据框时,如果没有它,我会得到与表格外观非常不同的东西,我不明白为什么。
    • @vuzun 类型转换。 o &gt; 0 是 TRUE/FALSE 逻辑,但在 + 0 之后变为 1/0 数字。
    【解决方案2】:

    您好,我认为您正在寻找一个共现矩阵,对吗?

    my_mat <- as.data.frame(matrix(c("A","A","B","B","B","B","C","C","C","a","b","f","g","e","h","d","e","f"),ncol=2))
    
    coc_mat <- matrix(nrow = length(levels(my_mat$V1)),ncol = length(levels(my_mat$V2)))
    colnames(coc_mat) <-  levels(my_mat$V2)
    rownames(coc_mat) <- levels(my_mat$V1)
    
    for(i in 1:length(levels(my_mat$V2))){
      for(j in 1:length(levels(my_mat$V1))){
        coc_mat[j,i] <- length(which(my_mat$V1==levels(my_mat$V1)[j] & my_mat$V2==levels(my_mat$V2)[i]))
    
      }
    }
    
    coc_mat
    

    这会创建一个像这样的 co-occ 矩阵

      a b d e f g h
    A 1 1 0 0 0 0 0
    B 0 0 0 1 1 1 1
    C 0 0 1 1 1 0 0
    

    这告诉您例如 A 和 a 在同一行中出现了多少次。 我希望这可以帮到你。 祝你有美好的一天

    还有:

    看看这个:

    Creating co-occurrence matrix

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 2018-10-06
      • 2012-05-20
      相关资源
      最近更新 更多