我需要对存储在数据帧中的数据进行一些计算。并将结果放入此数据框的新列中。
初始数据框:
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
asp-fallback-href="css/bootswatchSlate.css"
asp-fallback-test-class="hidden"
asp-fallback-test-property="display"
asp-fallback-test-value="none" />
现在我需要添加一个新列,其中包含当前raw ...的数据的操作结果。
运行下一个代码:
> str(mydf)
'data.frame': 1122 obs. of 6 variables:
$ MMSI : num 2.73e+08 2.73e+08 2.73e+08 2.73e+08 2.73e+08 ...
$ MMSI.1 : num 2.73e+08 2.72e+08 2.72e+08 2.72e+08 6.67e+08 ...
$ LATITUDE : num 46.9 46.9 46.9 46.9 46.9 ...
$ LONGITUDE : num 32 32 32 32 32 ...
$ LATITUDE.1 : num 46.9 46.9 46.9 46.9 46.9 ...
$ LONGITUDE.1: num 32 32 32 32 32 ...
我知道函数distGeo的数据结构应该是不同的。 如何修复此错误或如何更改代码以获取新列中的点之间的距离?
答案 0 :(得分:1)
如果没有要查看的数据,看起来您正在尝试计算单个点之间的距离。第二点可能包括列名
末尾的.1
library(geosphere)
mydf$distance <- with(mydf, distGeo(c(LONGITUDE, LATITUDE), c(LONGITUDE.1, LATITUDE.1)))
<强>更新强>
看起来错误是您传递整个数据框而不是单独传递每一行。试试这个
apply(mydf, 1, function(x) distGeo(x[c("LONGITUDE","LATITUDE")],x[c("LONGITUDE.1","LATITUDE.1")]))
或者只是传递特定数据列,因为它接受矩阵
distGeo(mydf[,c("LONGITUDE", "LATITUDE")], mydf[,c("LONGITUDE.1", "LATITUDE.1")])