创建一个差异矩阵比较R数据框中所有行之间的差异
Posted
技术标签:
【中文标题】创建一个差异矩阵比较R数据框中所有行之间的差异【英文标题】:Creating a difference matrix comparing differences between all rows in R dataframe 【发布时间】: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 |
***s | 0.8255 |
【问题讨论】:
请以文本而非图片的形式分享您的示例数据。 @GregorThomas,我将其更新为文本。现在看起来正确吗? 我可以复制/粘贴,谢谢! 【参考方案1】:dist
也应该可以工作
out <- with(df, as.matrix(dist(setNames(dw1, bioname))))
-输出
> out
Trump Biden Rogers Sewell ***s
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
***s 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 ***s
# 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
# ***s 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
***s 0.8255', header = T)
【讨论】:
以上是关于创建一个差异矩阵比较R数据框中所有行之间的差异的主要内容,如果未能解决你的问题,请参考以下文章