Создание списка всех попарных сравнений внутри фрейма данных в R

#r

Вопрос:

Из фрейма данных в R, который имеет координаты Xy (см. Пример) Я хотел бы добавить в строки (final X и final Y), чтобы показать все возможные попарные сравнения между ними.

 dt = data.frame(X = seq(1, 5, by=1), Y = seq(1, 5, by=1))
 

Это конечная цель, но должна быть строка для каждой возможной комбинации x, y и final_x, final_y

введите описание изображения здесь

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

1. Почему у вас нет координат x и y в отдельных столбцах как числовых, вместо того, чтобы объединять их в виде строки?

2. Как я думал, было бы проще работать с 1 столбцом вместо 2? Однако может легко иметь две отдельные колонки

3. Определенно проще иметь две координаты в отдельных столбцах, как числовые.

4. Согласитесь, что проще иметь x и y в отдельных столбцах, я бы рекомендовал просмотреть уроки по аккуратным данным .

5. Спасибо — я отредактировал выше

Ответ №1:

Вы можете использовать expand.grid :

 eg <- expand.grid(final_Y = 1:5, Y = 1:5, final_X = 1:5, X = 1:5)[,c(4,2,3,1)]
head(eg, n=20)
#    X Y final_X final_Y
# 1  1 1       1       1
# 2  1 1       1       2
# 3  1 1       1       3
# 4  1 1       1       4
# 5  1 1       1       5
# 6  1 2       1       1
# 7  1 2       1       2
# 8  1 2       1       3
# 9  1 2       1       4
# 10 1 2       1       5
# 11 1 3       1       1
# 12 1 3       1       2
# 13 1 3       1       3
# 14 1 3       1       4
# 15 1 3       1       5
# 16 1 4       1       1
# 17 1 4       1       2
# 18 1 4       1       3
# 19 1 4       1       4
# 20 1 4       1       5
nrow(eg)
# [1] 625
 

Я определил столбцы не по порядку и переупорядочил их просто в соответствии с порядком вашего ожидаемого вывода. Можно было бы легко сделать expand.grid(X=,Y=,final_X=,final_Y=) и оставить, [,c(...)] и эффективные результаты были бы такими же, но в другом порядке строк.

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

1. Fleaf, это делает то, что вы ожидаете?