R 总结给定唯一组合的两列

R 总结给定唯一组合的两列,r,R,提前谢谢。我有一个行程数据框,表示开始位置、结束位置和每个位置组合之间的距离。像这样: Start = c("Johns House", "Mikes House", "Franks House") Finish = c("Mikes House", "Johns House", "Lisas House") Distance = c(1000,1000,500) myDF = data.frame(Start, Finish, Distance) 我想返回一个新的数据框,它处理两次John

提前谢谢。我有一个行程数据框,表示开始位置、结束位置和每个位置组合之间的距离。像这样:

Start = c("Johns House", "Mikes House", "Franks House")
Finish = c("Mikes House", "Johns House", "Lisas House")
Distance = c(1000,1000,500) 
myDF = data.frame(Start, Finish, Distance)
我想返回一个新的数据框,它处理两次John/Mike旅行,但将它们视为一个独特的组合。具体来说,我想返回每个组合的总行程数和位置之间的距离,因此输出为:

newStart = c("Johns House", "Franks House")
newFinish = c("Mikes House", "Lisas House")
newDistance = c(1000,500)
Count = c(2,1)
newDF = data.frame(newStart, newFinish, newDistance, Count)
再次感谢。

库(data.table)
library(data.table)
myDT <- data.table(myDF)
x <- paste(myDT$Start, myDT$Finish, sep = "|")
myDT$v <- vapply(x, function(xi) paste(sort(strsplit(xi, "[|]")[[1]]), collapse=''), '')
myDT[, Count := length(Distance), by = v]
myDT <- myDT[!duplicated(v), ]
myDT

#          Start      Finish Distance           v Count
#1:  Johns House Mikes House     1000  JohnsMikes     2
#2: Franks House Lisas House      500 FranksLisas     1

myDT我认为使用SQL会更容易。在R中安装SQL包,如“sqldf”

首先,您可以通过以下两种方式计算每个元组开始-结束的行程:

library(sqldf)

sqldf("select distinct 
      min(a.Start, a.Finish) Start, 
      max(a.Start, a.Finish) Finish, 
      a.Distance, 
      count(*) Count
      from myDF a, myDF b
      where (a.Start = b.Start and  a.Finish = b.Finish)
      or (a.Start = b.Finish and a.Finish = b.Start)
      group by a.Start")

#          Start      Finish Distance Count
# 1 Franks House Lisas House      500     1
# 2  Johns House Mikes House     1000     2

字符串是否如示例中所示使用“XYZ House”?因为我正是基于这一点而分裂的。我已经更新了我的答案,让它更清楚一些。我刚刚在示例上运行了您的代码,myDF保持不变。谢谢Matt…我感谢您的帮助-但仍然没有幸运的第三次魅力?没有注意到你想要计数,而我在最初的答案中遗漏了字符串的粘贴。马特-谢谢,这真的很酷。我很感谢你回答这个问题,但我很好奇是否可以修改它,这样就不需要实际使用的字符串。比如说,不是“房子”,而是“公共汽车站”