R: Создать всевозможные комбинации данных столбцов - PullRequest
0 голосов
/ 17 марта 2020

У меня есть данные, которые соответствуют df. df показывает источник и пункт назначения, а также долготу и широту этих источников и пунктов назначения.

Я хочу использовать df для генерации df1. df1 дает все возможные комбинации источника и пункта назначения и при этом комбинирует соответствующие долготу и широту источника и пункта назначения.

Source <- c("A", "B", "C", "D")
Destination <- c("A", "B", "C", "D")
Source_Latitude <- c(1, 2, 3, 4)
Source_Longitude <- c(-1, -2, -3, -4)
Dest_Latitude <- c(1, 2, 3, 4)
Dest_Longitude <- c(-1, -2, -3, -4)
df <- data.frame(Source, Source_Latitude, Source_Longitude, Destination,Dest_Latitude,Dest_Longitude)


Source <- c("A", "A", "A", "A", "B","B","B","B", "C","C","C","C", "D","D","D","D")
Destination <- c("A", "B", "C", "D","A", "B", "C", "D","A", "B", "C", "D","A", "B", "C", "D")
Source_Latitude <- c(1,1,1,1, 2, 2, 2, 2, 3,3,3,3, 4,4,4,4)
Source_Longitude <- c(-1,-1,-1,-1,-2,-2,-2,-2,-3,-3,-3,-3,-4,-4,-4,-4)
Dest_Latitude <- c(1, 2, 3, 4,1, 2, 3, 4,1, 2, 3, 4,1, 2, 3, 4)
Dest_Longitude <- c(-1, -2, -3, -4,-1, -2, -3, -4,-1, -2, -3, -4,-1, -2, -3, -4)
df1 <- data.frame(Source, Source_Latitude, Source_Longitude, Destination,Dest_Latitude,Dest_Longitude)

Я пытался использовать crossing() и expand.grid() без какого-либо успеха

Ответы [ 2 ]

0 голосов
/ 19 марта 2020
all_combination<-   expand.grid(Source=df$Source, Destination=df$Destination)%>%
  inner_join(select(df, contains("Source")), by = "Source") %>%
  inner_join(select(df, contains("Dest")), by = "Destination")) %>%
  distinct()

Это сработало для меня. Потребовалось время, чтобы понять, как использовать функцию expand.grid().

0 голосов
/ 17 марта 2020
library(dplyr)

expand.grid(Source = Source, Destination = Destination) %>% 
  inner_join(select(df, contains("Source")), by = "Source") %>%
  inner_join(select(df, contains("Dest")), by = "Destination")) %>% 
  select(contains("Source"), contains("Dest")) %>% View()

В качестве дополнительного наблюдения, хотя код работает, я не думаю, что лучше хранить источники и места назначения в одном и том же кадре данных. Потому что количество источников и мест назначения может быть разным. Вероятно, было бы лучше иметь один фрейм данных для каждого и соответствующим образом адаптировать код.

...