【发布时间】:2019-02-10 18:21:03
【问题描述】:
我有一系列来自 Strava 的坐标,每 2.5 分钟记录一次,然后将这些坐标添加到 QGIS 地图中。我想通过取每对纬度和经度的平均值来插入中间的点。
我知道我可以使用 for 循环,但我更愿意使用 apply 系列函数中的一个。我知道我需要获取当前行,然后获取除最后一行之外的所有内容的下一行。
gpsSmall 是一个 data.frame 看起来像这样
activity_no lat lon
----------- --- ---
1 52.5111 -1.85222
1 52.5111 -1.86224
1 52.5111 -1.87226
... etc
2 52.6189 -1.85332
2 52.6284 -1.86332
2 52.6386 -1.87332
... etc
然后我编写了这些函数来创建额外的行,我将 rbind 到最后。
splitPoints <- function(point1, point2) {
meanLatitude = (point1$lat + point2$lat)/2
meanLongitude = (point1$lon + point2$lon)/2
point1$lat = meanLatitude
point1$lon = meanLongitude
point1
}
newPoints <- sapply(seq_len(nrow(gpsSmall) - 1),
function(i){
splitPoints(gpsSmall[i,], gpsSmall[i+1,])
})
但是,newPoints 返回一个 3(gpsSmall 中的列数)x 66(1 - gpsSmall 中的行数)的矩阵。我做错了什么?
【问题讨论】:
-
能否请您更新您的问题,以使您的输入复制/粘贴以及该输入所需的输出清晰?我认为
expand.grid、merge和approx的某种组合将使这变得非常容易,但我无法确定,而且您呈现输入数据的方式使其难以测试。与dput共享的数据或共享代码以创建示例数据是最好的。