在R编码方面,我是个小人物。我正在尝试为以下任务之一运行以下代码。我的基本目的是计算特定位置2公里范围内的景点数量,两个景点均由相应的经度和纬度指定。主数据集中的记录数约为29K,吸引力数为28。如何将下面的代码转换为性能更好的R代码(当前的代码确实很粗糙,根本不是一个好习惯)
for(i in 1:nrow(mainData)) {
attr_count[i] = 0
loc_coord = c(mainData$longitude[i],mainData$latitude[i])
for(j in 1:nrow(ny_attractions)) {
attr_coord = c(ny_attractions$lon[j],ny_attractions$lat[j])
dist = distVincentySphere(attr_coord,loc_coord)
if(dist <= 2000) {
attr_count[i] = attr_count[i] + 1
}
}
}
[编辑]:抱歉,我没有清楚地指出。这是我要实现的示例。我有2个数据集-
数据集-1(NYC_attractions)(27条记录)
enter image description here
数据集2(房屋列表的主数据)(29K条记录) enter image description here
现在,我需要在数据集2中再增加一列(num_of_attractions),以表示指定列表(即数据集2中的每条记录)的2Kms以内的景点数
希望,这可以解释问题
谢谢
答案 0 :(得分:0)
您好,https://stackoverflow.com/a/49860968/3042154在这里部分回答了您的问题。当您使用大地坐标(纬度/经度)而不是投影坐标(米)时,可以逐步完成。首先使用给定的答案,使用欧氏距离粗略选择潜在的邻居,然后根据您的距离细化选择范围