我有以下数据框:
Latitude , Longitude, Altitude
44.388401, 8.433392 , 463.000000
44.388571, 8.434575 , 471.000000
44.388740, 8.435758 , 507.000000
44.388910, 8.436941 , 563.000000
44.389079, 8.438123 , 606.000000
44.389249, 8.439306 , 629.000000
44.389418, 8.440489 , 639.000000
44.389588, 8.441672 , 640.000000
44.389757, 8.442854 , 590.000000
44.389927, 8.444037 , 564.000000
44.390096, 8.445220 , 543.000000
44.390265, 8.446403 , 527.000000
44.390435, 8.447585 , 469.000000
前两列是纬度和经度(以度为单位),第三列是海拔。我想做的是添加一列以表示观察位置与第一个观察位置之间的距离,例如(距离并不精确,仅用于显示)
Latitude , Longitude, Distance , Altitude
44.388401, 8.433392 , 0.000000, 463.000000
44.388571, 8.434575 , 10.000000, 471.000000
44.388740, 8.435758 , 21.000000, 507.000000
44.388910, 8.436941 , 25,231232, 563.000000
44.389079, 8.438123 , 33,211333, 606.000000
44.389249, 8.439306 , 55,000000, 629.000000
...
我知道我可以使用库distm
中的函数geosphere
,但是问题是:如何添加一列,该列的值由函数计算得出,该函数将参数的其他值作为参数相同的观察和第一次观察的值?
我见过this post,但是它允许根据相同观察值(而不是相同观察值和第一个观察值)的其他数据来计算新列。
答案 0 :(得分:0)
不确定application/json
函数的编写方式为何,但这应该可以:
<property name="messageType" scope="axis2" type="STRING" value="application/json; charset=utf-8"/>
<property name="ContentType" scope="axis2" type="STRING" value="application/json; charset=utf-8"/>
答案 1 :(得分:0)
如果我正确理解了这个问题,那么您可以使用pmap_dbl
中的purrr
library(dplyr)
library(geosphere)
library(purrr)
df %>%
mutate(Distance = pmap_dbl(., ~distm(c(..2, ..1),
c(Longitude[1], Latitude[1]),
fun = distHaversine)))
示例数据
df <- structure(list(Latitude = c(44.388401, 44.388571, 44.38874, 44.38891,
44.389079, 44.389249, 44.389418, 44.389588, 44.389757, 44.389927,
44.390096, 44.390265, 44.390435), Longitude = c(8.433392, 8.434575,
8.435758, 8.436941, 8.438123, 8.439306, 8.440489, 8.441672, 8.442854,
8.444037, 8.44522, 8.446403, 8.447585), Altitude = c(463, 471,
507, 563, 606, 629, 639, 640, 590, 564, 543, 527, 469)), .Names = c("Latitude",
"Longitude", "Altitude"), class = "data.frame", row.names = c(NA,
-13L))