Short version: I have a dataframe with two columns: Latitude and Longitude, being each of them in degrees, minutes and seconds. After reading some similar questions like this one, I decided to use measurements
package to make the conversion, but results get messed when converting from one unit to another (see below).
Detailed version:
Provided the following dataframe where I have two columns, Latitude
and Longitude
expressed in degrees, minutes and seconds
df = data.frame(
Latitude = c("15° 33' 9\"",NA,"52° 58' 13\"", NA, "21° 1' 28\"", "21° 2' 26\"", "10° 47' 31\"", NA, "-34° 53' 38\"", "41° 7' 56\""),
Longitude = c("48° 30' 59\"", NA, "-3° 10' 13\"", NA, "105° 50' 34\"", "105° 47' 52\"", "106° 41' 29\"", NA, "-56° 8' 16\"", "-104° 46' 30\""))
I want to convert those values into decimal degrees by using measurements
package as follows:
library(measurements)
# Turn degrees, minutes and seconds into spaces so they can be used with
# measurements::conv_unit.
df$Latitude = str_replace(df$Latitude, "°", "")
df$Latitude = str_replace(df$Latitude, "'", "")
df$Latitude = str_replace(df$Latitude, "\"", "")
df$Longitude = str_replace(df$Longitude, "°", "")
df$Longitude = str_replace(df$Longitude, "'", "")
df$Longitude = str_replace(df$Longitude, "\"", "")
# Use measurements::conv_unit to convert to decimal degrees.
df$Latitude = conv_unit(df$Latitude, "deg_min_sec", "dec_deg")
df$Longitude = conv_unit(df$Longitude, "deg_min_sec", "dec_deg")
However, I get the following output:
> df
Latitude Longitude Latitude_dec Longitude_dec
1 15° 33' 9" 48° 30' 59" 15.5525 48.5163888888889
2 <NA> <NA> <NA> <NA>
3 52° 58' 13" -3° 10' 13" <NA> <NA>
4 <NA> <NA> 1.4725 50.5958333333333
5 21° 1' 28" 105° 50' 34" 2.43611111111111 47.8961111111111
6 21° 2' 26" 105° 47' 52" <NA> <NA>
7 10° 47' 31" 106° 41' 29" 34.8938888888889 56.1377777777778
8 <NA> <NA> 41.1322222222222 104.775
9 -34° 53' 38" -56° 8' 16" -0 -0
10 41° 7' 56" -104° 46' 30" 0 -0
As you can see, first row calculated fields seem to be right, whereas starting with line 3, results get messed up, and, hence, being completely useless.
I have read ?conv_unit
several times and I don't find any mistake. What am I doing wrong?