Создание матрицы различий, сравнивающей различия между всеми строками в кадре данных R

#r #dataframe #formatting #networkx #igraph

#r #фрейм данных #форматирование #networkx #igraph

Вопрос:

У меня есть фрейм данных с двумя столбцами: первый-это имя американских политиков ( bioname ). Вторая колонка-это их идеологический балл D-W ( dw1 ). Я хочу создать сеть, в которой bioname узлы/вершины являются узлами, а ребра/связи взвешиваются как разница между dw1 оценками двух политиков. Например, я бы хотел, чтобы вес ребра между Трампом и Байденом составлял .3615 (.7015 — .34) и .022 (.7015 — .6795) между Трампом и Роджерсом и так далее для КАЖДОЙ ВОЗМОЖНОЙ ПАРЫ предметов в наборе данных.

Как я могу переформатировать свои данные, чтобы вычислить эти различия для всех политиков в наборе данных?

бионаме дв1
Козырь 0.7015
Байден 0.3400
Роджерс 0.6795
Сьюэлл 0.3035
Ручьи 0.8255

Комментарии:

1. Пожалуйста, поделитесь своими образцами данных в виде текста, а не изображения.

2. @GregorThomas, я обновил его до текста. Теперь это выглядит правильно?

3. Я могу скопировать/вставить его, спасибо!

Ответ №1:

dist должно также работать

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

-выход

 gt; 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)