【问题标题】:Creating a difference matrix comparing differences between all rows in R dataframe创建一个差异矩阵比较R数据框中所有行之间的差异
【发布时间】:2022-01-13 15:05:18
【问题描述】:

我有一个包含两列的数据框:第一列是美国政客的姓名 (bioname)。第二列是他们的 D-W 意识形态分数(dw1)。我想创建一个网络,其中bioname 是节点/顶点,而边/联系被加权为两位政治家的dw1 分数之间的差异。例如,我希望特朗普和拜登之间的边权重为 .3615 (.7015 - .34),特朗普和罗杰斯之间的边权重为 0.022 (.7015 - .6795),以此类推数据集。

如何重新格式化我的数据以计算数据集中所有政治人物的这些差异?

bioname dw1
Trump 0.7015
Biden 0.3400
Rogers 0.6795
Sewell 0.3035
Brooks 0.8255

【问题讨论】:

  • 请以文本而非图片的形式分享您的示例数据。
  • @GregorThomas,我将其更新为文本。现在看起来正确吗?
  • 我可以复制/粘贴,谢谢!

标签: r dataframe formatting networkx igraph


【解决方案1】:

dist 也应该可以工作

out <- with(df, as.matrix(dist(setNames(dw1, bioname))))

-输出

> out
        Trump  Biden Rogers Sewell Brooks
Trump  0.0000 0.3615 0.0220 0.3980 0.1240
Biden  0.3615 0.0000 0.3395 0.0365 0.4855
Rogers 0.0220 0.3395 0.0000 0.3760 0.1460
Sewell 0.3980 0.0365 0.3760 0.0000 0.5220
Brooks 0.1240 0.4855 0.1460 0.5220 0.0000

【讨论】:

    【解决方案2】:

    我会创建一个命名向量并使用outer 来构建差异矩阵。调用你的数据框df:

    named_vec = setNames(df$dw1, nm = df$bioname)
    outer(named_vec, named_vec, FUN = "-")
    #          Trump   Biden  Rogers Sewell  Brooks
    # Trump   0.0000  0.3615  0.0220 0.3980 -0.1240
    # Biden  -0.3615  0.0000 -0.3395 0.0365 -0.4855
    # Rogers -0.0220  0.3395  0.0000 0.3760 -0.1460
    # Sewell -0.3980 -0.0365 -0.3760 0.0000 -0.5220
    # Brooks  0.1240  0.4855  0.1460 0.5220  0.0000
    

    使用这些数据

    df = read.table(text = 'bioname dw1
    Trump   0.7015
    Biden   0.3400
    Rogers  0.6795
    Sewell  0.3035
    Brooks  0.8255', header = T)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多