r - 将 Lat/Long 坐标更改为正小数和负小数
问题描述
您好,我有一组数据,其中包含以下格式的纬度和经度坐标:“22.0N”、“2.0E”,我希望能够以数字方式处理该数据。我是 R 新手,所以我想知道是否有人可以帮助我将数据列 (fbdata$Latitude (Deg)) 转换为更有用的东西。即南纬和东经是负数,没有任何字母,这样我就可以从字符类中更改它。这是我想出的代码显然不起作用(这就是我在这里的原因!)
for (i in fbdata$Latitude..Deg.) {
if (endsWith(fbdata$Latitude..Deg.[i],"S")) {
print (fbdata$Latitude..Deg.[i]) #paste0 ("-",fbdata$Latitude..Deg.)
}
}
任何帮助都会很棒!
解决方案
您可以使用 tidyr 的separate()
功能来做到这一点。
首先,我们分成两列以将方向与度数分开。我选择使用 remove = FALSE 保留旧列,以防您将其用于其他目的。sep = -1
拆分最后一个字符,即方向。一旦你拥有了自己的学位,你应该能够使用as.numeric
它来转换它。
fbdata %>%
separate(col = Latitude..Deg., into = c('degree', 'direction'), sep = -1, remove = FALSE) %>%
mutate(degree = as.numeric(degree))
然后对于正/负,对于方向是南或东的情况,我们将度数列乘以 -1 以翻转符号。当方向不是这两个中的任何一个时,我们保持原样。
继上述代码之后:
%>% mutate(degree = case_when(direction %in% c('S', 'E') ~ degree*(-1), TRUE ~ degree))
或者只是使用ifelse()
,我个人觉得更容易阅读:
fbdata$degree <- ifelse(fbdata$direction %in% c('S', 'E'), fbdata$degree*(-1), fbdata$degree)
推荐阅读
- visual-studio-code - 在 Business Central 报表扩展中读取 Blob 到文本
- excel - VBA EXCEL另存为.pdf
- typescript - 递归异步函数比使用 await 的函数更好还是更快?
- ios - Xamarin.Forms iOS 应用未向 Azure 通知中心注册
- java - Apple eciesEncryptionCofactorVariableIVX963SHA256AESGCM vs BouncyCastle ECCDHwithSHA256KDF
- c# - WPF - 在后台运行长时间操作时更新元素
- python - 如何将 HTML 输入连接到 python 函数?
- c# - 如何在浏览器重新启动时保留 firefox temporay 插件
- javascript - 为什么在 sql.js 中出现“NOT NULL constraint failed”错误?
- mysql - 如何在 SQL 中显示所有已批准状态的总数?