简体   繁体   English

将坐标条目从东和西转换为正负

[英]Converting coordinate entries from East and West to positive and negative

I currently have a data set listed as我目前有一个数据集列为

Latitude     Longitude
lat:51.40    long:2.19W
lat:50.52    long:1.09E
lat:57.54    long:3.06W

How do I remove the W and E and make the W reading a negative in Rstudio?如何删除 W 和 E 并使 Rstudio 中的 W 读数为负数?

after running dput(head(df)) as comment below suggested (the first few entries in the data set are errors so lat and long values were recorded as 0).在按照下面的评论建议运行 dput(head(df)) 之后(数据集中的前几个条目是错误的,因此 lat 和 long 值被记录为 0)。

structure(list(latitude = c(" deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 56.3600006103516", " deg_latitude: 56.3400001525879"), longitude = c(" deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 3.38000011444092W", " deg_longitude: 3.36999988555908W")), row.names = c(NA, 20L), 8839811219518结构(列表(纬度= c(“deg_latitude:0”,“deg_latitude:0”,“deg_latitude:0”,“deg_latitude:0”,“deg_latitude:0”,“deg_latitude:0”,“deg_latitude:0”, " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude: 0", " deg_latitude :0”,“deg_latitude:0”,“deg_latitude:0”,“deg_latitude:56.3600006103516”,“deg_latitude:56.3400001525879”),经度= c(“deg_longitude:0.0”,“deg_longitude:0.0”,“deg_longitude:0.0” , " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 0.0", " deg_longitude: 3.38000011444092W", "deg_longitude : 3.36999988555908W"), row.names = c(NA, 20L), 8839811219518 8 = "data.frame") 8 = “数据框”)

Remove all characters that is not digits and punctuation, and if "W" is detected ( str_detect() ) turn the value to negative删除所有不是数字和标点符号的字符,如果检测到“W”( str_detect() )将值变为负数

library(tidyverse) 

df %>%
  mutate(across(
    everything(),
    ~ case_when(
      str_detect(., "W") ~ as.numeric(str_remove_all(., "[^0-9\\.]")) * -1,
      TRUE ~ as.numeric(str_remove_all(., "[^0-9\\.]"))
    )
  ))

# A tibble: 3 × 2
  Latitude Longitude
     <dbl>     <dbl>
1     51.4     -2.19
2     50.5      1.09
3     57.5     -3.06

EDIT:编辑:

df %>%
  mutate(across(
    everything(),
    ~ case_when(
      str_detect(., "W") ~ str_c("-", str_remove_all(., "[^0-9\\.]")),
      TRUE ~ str_remove_all(., "[^0-9\\.]"
    )
  ))) 

data.table solution data.table解决方案

library(data.table)
library(readr)
DT <- fread("Latitude     Longitude
lat:51.40    long:2.19W
lat:50.52    long:1.09E
lat:57.54    long:3.06W")

DT[, c("deg_lat", "deg_lon") := lapply(.SD, readr::parse_number)]
DT[grepl(".*W$", Longitude), deg_lon := -1 * deg_lon]

    Latitude  Longitude deg_lat deg_lon
1: lat:51.40 long:2.19W   51.40   -2.19
2: lat:50.52 long:1.09E   50.52    1.09
3: lat:57.54 long:3.06W   57.54   -3.06

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM