如何在R中将嵌套的for循环操作转换为更有效的代码

时间:2018-11-25 07:58:48

标签: r for-loop

在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以内的景点数

希望,这可以解释问题

谢谢

1 个答案:

答案 0 :(得分:0)

您好,https://stackoverflow.com/a/49860968/3042154在这里部分回答了您的问题。当您使用大地坐标(纬度/经度)而不是投影坐标(米)时,可以逐步完成。首先使用给定的答案,使用欧氏距离粗略选择潜在的邻居,然后根据您的距离细化选择范围