为现有数据帧中具有连续序列的每对行创建一行的新数据帧

如何解决为现有数据帧中具有连续序列的每对行创建一行的新数据帧

我有一个现有的数据框,其中每一行代表一个地理点。每个点由唯一的 ID、用户定义的序列号及其一对地理坐标定义,如下所示:

id  Sequence Latitude Longitude Trajectory
544        0 41.37990   2.17220          1
545        1 41.37874   2.17104          1
546        0 41.37867   2.17092          2
547        1 41.37863   2.17084          2
548        2 41.37857   2.17073          2
549        3 41.37853   2.17065          2

请注意,这些点来自一系列轨迹,其中每个轨迹由遵循序列变量的连续点形成。我还有一个现有的变量“轨迹”将这些连续的点分组。所以,在这个例子中,有两个点的轨迹,然后是 4 个点的轨迹。

我需要创建一个新的数据框(我们称之为“线”),其中每条线需要一行,连接同一轨迹中的两个连续点。每行都需要包含两个点索引及其两对坐标,理想情况下,还需要包含轨迹编号。所以上一个例子的结果是:

Line  id1 Latitude1 Longitude1 id2 Latitude2 Longitude2 Trajectory
0     544  41.37990    2.17220 545  41.37874    2.17104          1
1     546  41.37867    2.17092 547  41.37863    2.17084          2
2     547  41.37863    2.17084 548  41.37857    2.17073          2
3     548  41.37857    2.17073 549  41.37853    2.17065          2

我一直在尝试使用诸如 tidyverse、dplyr 和类似的库来避免使用 for 循环,因为我知道它们效率不高,并且现有数据框有数百万个点,但没有任何效果,我找不到任何类似的问题。

欢迎任何有关如何解决问题的帮助。提前致谢!

解决方法

当原始数据按轨迹和序列排序时,例如我可以在经度,纬度和轨迹列中移动一行,使经度1/2,纬度1/2和轨迹1/2,然后提取行轨迹相同。

假设原始数据框是“点”:

n = nrow(points)
temp <- data.frame(
  id1 = points$id[1:(n-1)],Latitude1 = points$Latitude[1:(n-1)],Longitude1 = points$Longitude[1:(n-1)],id2 = points$id[2:n],Latitude2 = points$Latitude[2:n],Longitude2 = points$Longitude[2:n],Trajectory1 = points$Trajectory[1:(n-1)],Trajectory2 = points$Trajectory[2:n]
)
temp=temp[Trajectory1==Trajectory2,]
n = nrow(temp)
ret <- data.frame(
  Line = c(0:(n-1)),id1 = temp$id1,Latitude1 = temp$Latitude1,Longitude1 = temp$Longitude1,id2 = temp$id2,Latitude2 = temp$Latitude2,Longitude2 = temp$Longitude2,Trajectory = temp$Trajectory1
)

ret 是输出。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?