首页 > 解决方案 > R 通过子集和添加两列改进代码

问题描述

我需要一些帮助来改进我的部分代码(我是初学者)。我有一个大数据库(flussi_coord),其中有一列包含不同地区的名称。每个区域都与一个仓库相关联,我需要将两列及其坐标添加到flussi_coord;这些包含在另一个称为 coord_oba 的矩阵中。oba 只是一个区域列表,使用级别(flussi_coord$oba)创建。

我想出的解决方案有效,但速度非常慢。对于flussi_coord的每一行,我检查是否与oba中的名称有对应关系;如果为真,我将仓库的经度和纬度粘贴到两个向量中,稍后将它们添加到flussi_coord。

for (k in 1:dim(flussi_coord)[1]) {      
  for (i in 1:length(oba)) {             
    if (flussi_coord[k,5] == oba[i]) {
      LongMag[k] <- coord_oba[i,1]
      LatMag[k] <- coord_oba[i,2]
    }
  }
}
flussi_coord <- cbind(flussi_coord, LongMag, LatMag)

我知道我需要以某种方式过滤数据库,选择与某个区域匹配的行,添加两列并迭代其他区域。我试图寻找类似的解决方案,但我无法运行代码。

#this doesn't work
for (i in 1:length(oba)) {
  flussi_coord[which(flussi_coord$OBA == oba[i]), ]$Longititudine_magazzino <- coord_oba[i,1]
  flussi_coord[which(flussi_coord$OBA == oba[i]), ]$Latitudine_magazzino <- coord_oba[i,2]
}

提前感谢您帮助我!

标签: rfiltersubset

解决方案


假设数据集是数据框,这应该有效:

flussi_coord$LongMag <- coord_oba[match(flussi_coord[,5], oba),1]
flussi_coord$LatMag <- coord_oba[match(flussi_coord[,5], oba),2]

推荐阅读