创建一个差异矩阵比较 R 数据帧中所有行之间的差异

Creating a difference matrix comparing differences between all rows in R dataframe

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

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

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

我会创建一个命名向量并使用 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)

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