【问题标题】:R improving the code with subsetting and adding two columnsR通过子集和添加两列改进代码
【发布时间】:2020-02-05 22:13:25
【问题描述】:

我需要一些帮助来改进我的部分代码(我是初学者)。 我有一个大数据库(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]
}

提前感谢您帮助我!

【问题讨论】:

  • 您能否制作一个可重现的示例,我们可以轻松运行?例如通过发布dput(flussi_coord[1:10,]) 的输出
  • 您应该为此使用merge。我不知道您的列名,所以这是不完整的,但类似于merge(flussi_coord, cbind(oba, coord_oba))。 (coord_oba是从哪里来的?和oba的顺序一样吗?​​)
  • 非常感谢大家,问题解决了:)

标签: r filter subset


【解决方案1】:

假设数据集是数据框,这应该可以工作:

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

【讨论】:

  • 嗨@lelloba,很高兴能提供帮助:) 您能否通过单击复选标记并投票来接受答案?谢谢。
  • 我做到了@phago29,这是我收到的消息:“感谢您的反馈!声望低于 15 的人的投票会被记录下来,但不要更改公开显示的帖子得分。 " :)
  • @lelloba 在向下箭头下方有一个复选标记。你可以点击它。谢谢:)
猜你喜欢
  • 1970-01-01
  • 2021-12-13
  • 2012-12-07
  • 2017-07-18
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
相关资源
最近更新 更多