Вы можете сортировать значения без необходимости объединения, например:
df = data.frame(
CityFrom = c("Paris", "Lyon", "London", "Manchester"),
CityTo = c("Lyon", "Paris", "Manchester", "London"),
Count = c(2, 4, 5, 6),
stringsAsFactors = FALSE
)
mysort = apply(df[,1:2], 1, sort)
rownames(mysort) = c("CityCodeBidirectionalFrom", "CityCodeBidirectionalTo")
cbind(df, t(mysort), stringsAsFactors=FALSE)
## CityFrom CityTo Count CityCodeBidirectionalFrom CityCodeBidirectionalTo
## 1 Paris Lyon 2 Lyon Paris
## 2 Lyon Paris 4 Lyon Paris
## 3 London Manchester 5 London Manchester
## 4 Manchester London 6 London Manchester