You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中处理含'Missed'值的DMS转DD GPS坐标转换问题

解决DMS转十进制度坐标并处理缺失值的问题

直接上解决方案:我们可以写一个兼容两种DMS格式(.分隔和°'分隔)的转换函数,自动跳过'Missed'值,再结合dplyr批量处理目标列。

1. 自定义DMS转十进制度函数

这个函数会先判断输入是否为'Missed',是则返回NA;否则解析度、分、秒并计算十进制度:

dms_to_dd <- function(dms_str) {
  # 处理缺失值
  if (dms_str == "Missed" | is.na(dms_str)) {
    return(NA_real_)
  }
  
  # 统一处理两种分隔符:把°和'替换成.,方便拆分
  cleaned_str <- gsub("[°']", ".", dms_str)
  # 拆分度、分、秒
  parts <- as.numeric(strsplit(cleaned_str, "\\.")[[1]])
  
  # 计算十进制度:度 + 分/60 + 秒/3600
  dd <- parts[1] + parts[2]/60 + parts[3]/3600
  return(dd)
}

2. 结合dplyr批量转换并写入新列

在你已有的代码基础上,用mutate调用上面的函数,一次性处理两列:

library(dplyr, warn = FALSE)

# 加载你提供的测试数据框
New_Df <- structure(c("33°53'27.0", "33°85'09.3", "33°52'77.1", "33°52'79.0", 
"33°52'79.0", "33°51'00.", "Missed", "Missed", "33°85'09.3", 
"Missed", "33°50'14.1", "33°85'09.2", "33°50'20.", "33°80'14.9", 
"33°50'47.1", "Missed", "33°49'0.0", "33°57'93.8", "33°57'93.9", 
"Missed", "Missed", "33°49'75.5", "33°48'45.2", "33°85'09.3", 
"Missed", "33°57'93.8", "33°48'79.3", "33°53'27.", "Missed", 
"33°52'79.", "27°16'04.0", "27°40'93.2", "27°28'44.", "27°15'85.0", 
"27°15'85.0", "27°21'40.", "Missed", "Missed", "27°40'93.2", 
"Missed", "27°13'20.0", "27°40'93.1", "27°20'45.", "27°31'21.4", 
"27°13'94.9", "Missed", "27°11'44.6", "27°10'85.2", "23°10'85.2", 
"Missed", "Missed", "27°21'68.0", "27°18'19.0", "27°40'93.2", 
"Missed", "27°10'85.2", "27°17'79.2", "27°16'04.", "Missed", 
"27°15'85.", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
), dim = c(30L, 4L), dimnames = list(NULL, c("Longitude_E_Corrected", 
"Latitude_N_Corrected", "Decimal_Degrees_Longitude_E", "Decimal_Degrees_Latitude_N"
)))

# 执行转换
New_Df <- New_Df |>
  mutate(
    Decimal_Degrees_Longitude_E = sapply(Longitude_E_Corrected, dms_to_dd),
    Decimal_Degrees_Latitude_N = sapply(Latitude_N_Corrected, dms_to_dd)
  )

# 查看结果
head(New_Df)

关键说明

  • 函数自动识别并跳过'Missed'和NA值,不会中断转换流程
  • 兼容你提供的两种DMS格式:33.53.270和33°53'27.0,无需额外预处理
  • 转换后的结果直接覆盖你之前创建的空列,无需额外操作

内容的提问来源于stack exchange,提问作者Alice Hobbs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 14:24:50