计算Google电子表格

时间:2015-06-22 18:13:52

标签: matrix web-applications google-sheets spreadsheet

我想在Google电子表格中计算 不同列的相似度百分比 。 但是......我不知道该怎么做。

让我解释一下我想说的话,以及针对哪个问题'我试图找到一个(简单的)解决方案。

在Google电子表格中,我有两张。

在第一张表上有一张表格,其中包含几个(即将出现的)政治提案以及一些政党如何投票赞成这些提案。每个投票值(是或否)都将手动添加。

在第二张表上有一个块矩阵,其中两个政党的百分比投票赞成相同的提案。在这张表中,我从第一张表中算出了每一方与其他方相比的相似之处。或者: X中有多少次投票两方完全相同?

一些例子:

  • 甲方投票2次与乙方完全相同,反之亦然。 我用来计算块矩阵中的%的公式是= 2/5。
  • 甲方投票1次与C方完全相同,反之亦然。我用来计算块矩阵中的%的公式是= 1/5
  • 乙方投票2次与C方完全相同,反之亦然。我用来计算块矩阵中的%的公式是= 2/5
  • 等等。

N.B。 ' 5'在X / 5中,目前最多有五个提案,但在不久的将来,这个数量会增加到更大的数量

您可以在此处查看此电子表格的示例:https://docs.google.com/spreadsheets/d/1rVaWN_FEV0qOk9kCp-SON4r-THsHZMqA5JQb9fNcEnM/edit?usp=sharing(如上所述,使用两张表)

现在,我手动计算相似度的百分比(这意味着:手动),这对我来说似乎不是很有效,特别是当政治提案的数量增加时,甚至更多现在已经很费时间了。

我认为使用公式可以更智能,更有效地计算相似度的百分比,所以当我必须广告一些新的投票结果时,块矩阵中自动相似的百分比将会自动调整。

但......怎么做?

公式,解决方案,想法和/或建议(即使是关于如何在MS Excel中执行此操作)非常感谢! : - )

2 个答案:

答案 0 :(得分:1)

这可以通过矩阵乘法来完成。

这是我使用的公式:

=ArrayFormula(
    (SUMPRODUCT(
        MMULT(
            (IF('Overview of votes by party'!$B$2:$E$2=B$2;'Overview of votes by party'!$B$3:$E$7)="Yes")*1;
            TRANSPOSE(($B$2:$E$2>0)*1)
        )*
        MMULT(
            (IF('Overview of votes by party'!$B$2:$E$2=$A3;'Overview of votes by party'!$B$3:$E$7)="Yes")*1;
            TRANSPOSE(($B$2:$E$2>0)*1))
    )+
    SUMPRODUCT(
        MMULT(
            (IF('Overview of votes by party'!$B$2:$E$2=B$2;'Overview of votes by party'!$B$3:$E$7)="No")*1;
            TRANSPOSE(($B$2:$E$2>0)*1)
        )*
        MMULT(
            (IF('Overview of votes by party'!$B$2:$E$2=$A3;'Overview of votes by party'!$B$3:$E$7)="No")*1;
            TRANSPOSE(($B$2:$E$2>0)*1)))
    )/
    (
        COUNTIF('Overview of votes by party'!B:B;"Yes")+
        COUNTIF('Overview of votes by party'!B:B;"No")
    )
)

基本上这个过程是:

  1. 取两个比较方的值矩阵。即:

    IF('Overview of votes by party'!$B$2:$E$2=B$2;'Overview of votes by party'!$B$3:$E$7)="Yes")*1 
    

    IF('Overview of votes by party'!$B$2:$E$2=$A3;'Overview of votes by party'!$B$3:$E$7)="Yes")*1
    
  2. 两个矩阵中每行的总和,创建两个新矩阵
    (每个矩阵的维数为1 x #Proposals)。这是通过将每个矩阵乘以由具有与#proposals相同行数的所有1的单个列矩阵来完成的。即:

    MMULT(
            (IF(..PartyA..)*1;
            TRANSPOSE(($B$2:$E$2>0)*1)
        )
    

    MMULT(
            (IF(..PartyB..)*1;
            TRANSPOSE(($B$2:$E$2>0)*1)
        )
    
  3. 将步骤2中的两个矩阵相乘,创建最终矩阵

  4. 使用SUMPRODUCT

  5. 获取从步骤3创建的矩阵的总和
  6. 完成1-4" No"和"是",将两个总和加在一起

  7. 将第5步中的总和除以提案总数:

    (
        COUNTIF('Overview of votes by party'!B:B;"Yes")+
        COUNTIF('Overview of votes by party'!B:B;"No")
    )
    
  8. 你可以看到这个here

答案 1 :(得分:0)

我制作了一份产生相同输出的示例表。

https://goo.gl/vTpNpa

该公式位于'相似性矩阵的单元格B3中。片。

相关问题