2017-09-15 2 views
0

Je travaille dans R. J'ai un df avec lat et long lu comme:Comment recalculer la latitude et les minutes décimales en degrés décimaux lorsque les valeurs sont numériques?

 lat  long 
    5542.780 1204.000 
    5540.463 1005.425 
    5639.760 958.420 
    etc. 

Où latitude est de 55 degrés et 42,780 est minutes après la virgule. Je veux transformer ceci en degrés décimaux avec la sortie:

 lat  long 
    55.713 12.06667 
    55.67438 10.09042 
    56.66267 9.973667 
    etc. 

Je sais que ceci peut être calculé par ex. 55 + 42,780/60 = 55,713. Mais je ne sais pas comment le faire automatiquement pour toute la df au sein de R, qui compte environ 79 000 observations :) ça doit être un moyen, j'ai cherché mais je n'arrive pas à trouver la solution.

+1

double possible de [Conversion de coordonnées géographiques de degré en décimal] (https://stackoverflow.com/questions/14404596/converting-geo-coordinates-from-degree -to-decimal) – amonk

+0

https://stackoverflow.com/questions/14404596/converting-geo-coordinates-from-degree-to-decimal – amonk

+0

Merci, mais non. Comme il utilise une fonction pour diviser les données en symboles fixes, j'ai essayé de l'ajuster pour mes données mais cela n'a pas fonctionné. J'avais besoin d'un code qui ajuste où diviser les données de degrés, fourni ci-dessous! –

Répondre

1

J'ai simplement implémenté votre calcul mentionné dans la publication pour avoir la conversion sur une base de données complète. J'espère que cela t'aides!

df <- read.table(text="lat  long 
5542.780 1204.000 
5540.463 1005.425 
5639.760 958.420", header=T, sep="") 
df 

df_converted <- sapply(df, function(x) 
    as.numeric(gsub("(.*)(\\d{2}\\.\\d+)", "\\1", formatC(as.numeric(x),format='f',digits=3,flag='0'))) + 
    (as.numeric(gsub("(.*)(\\d{2}\\.\\d+)", "\\2", formatC(as.numeric(x),format='f',digits=3,flag='0')))/ 60)) 
df_converted 

sortie est:

  lat  long 
[1,] 55.71300 12.066667 
[2,] 55.67438 10.090417 
[3,] 56.66267 9.973667 
+0

@ E.ThereseHarvey pls ne pas oublier de [marquer comme la bonne réponse] (https://stackoverflow.com/help/someone-answers) si elle a résolu votre problème :) – Prem

+0

Cela fonctionne excellent! Merci beaucoup! J'avais besoin d'être réglable pour 1 ou 2 chiffres dans le numéro de diplôme, ce qui rendait vraiment difficile. Aussi maintenant marqué comme correct, –