【问题标题】:Cleaning Geocode Data清理地理编码数据
【发布时间】:2018-08-24 02:17:00
【问题描述】:

我有一个像这样的df:

df = data.frame(longitude = c('-235.969', 
                       '-23.596.244', 
                       '-2.359.186'))

这是我试图转换为类似这样的一列地理编码的示例

new_df = data.frame(longitude = c('-23.5969', '-23.596244', '-23.59186'))

主要目的是在传单应用程序中使用地理编码。

【问题讨论】:

  • 有一些方法可以用正则表达式来做到这一点,但是,我首先要问你是如何得到你原来的df 的?也许df 的创建过程中可能会发生一些变化
  • as.numeric(gsub('(-?\\d{2})(.*)', '\\1.\\2', gsub('\\.', '', df$longitude))) 也许,但同意这可能应该在上游得到修复。
  • 我收到了一个公司案例,但我把数字出现的 3 种不同形状放在这里。我想过查看 read.csv 的文档,但找不到任何东西。在 Excel 中,它就像这样打开,但它的阅读器解释正确。也许使用 excel 的打开包中的某些功能可以更轻松地管理这个?
  • @RafaelBicudo Excel 可能是罪魁祸首。我会在文本编辑器中打开 csv 文件以查看其逻辑和/或尝试使用 data.table::fread() 直接导入 R。
  • @snoram 同样的错误。错误可能来自发送我的公司的原始来源。

标签: r regex leaflet stringr geocode


【解决方案1】:

如果真的有必要,我会分两步完成:

library(magrittr)
gsub(".", "", df$longitude, fixed = TRUE) %>%
  sub("(\\d{2})", "\\1\\.", .)

[1] "-23.5969"   "-23.596244" "-23.59186" 

首先删除任何.,然后将前两位数字替换为前两位数字+.

附言。没有管道你可以做:

sub("(\\d{2})", "\\1\\.", gsub(".", "", df$longitude, fixed = TRUE))

编辑:重要警告

正如马特指出的那样,这仅在您的经度始终包含如果您的经度度数为两位数 (10-99) 时才有效。

【讨论】:

  • 只有当您可以确定所有经度值都在 –99º 和 +99º 之间时,这才有效吗?否则,您的正则表达式会将 -122.41º(例如旧金山)替换为 -12.241(在同一纬度,位于里斯本以西约 200 公里处的大西洋中的一个点)。
  • 正确。但是您能从原始帖子的逻辑中了解更多内容吗?
  • 不,我不知道第二个是什么。可能代表。我的第一个想法是度.分.秒,但数字太大了。正如@SymbolixAU 上面评论的那样,这里的解决方案将首先来自于理解数据是如何以这种方式结束的。
  • 正如我上面所说,我从一个商业案例中收到了这个。这是一个 csv 文件,但是 excel 比 read.csv 函数更好地读取它(从字面上看,就像我用这种模式放在这里一样)。也许,使用excel文件阅读器功能,我可以获得更好的结果吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2010-10-31
相关资源
最近更新 更多