es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema con decimalLongitude y decimalLatitude para crear un SpatiaPointDataframe

Soy nuevo en R y estoy tratando de aprender.

Tengo un gran dataframe de Gbif (900.000 filas) con el nombre de mis especies y las coordenadas decimalLongitude y decimalLatitude, pero cuando intenté crear un SpatialPointDataframe como siempre con la función coordinates(data.frame) <- ~ lon + lat (cambié antes el nombre de las columnas de decimalLongitude a lon, etc. y eliminé el nombre de la especie, así que solo tengo “lon, lat y especie=1” como siempre en mi análisis):

Aquí está la función head() de mi dataframe

lon            lat      species
1  4.841.452   5317168       1
2 10.380.893  48888992       1
3 12.999.839  52388378       1
4  1.002.614  53190685       1
5  8.820.133  50520302       1

y R respondió: #Error in .local(obj, …): no se pueden obtener coordenadas de una matriz no numérica

Así que veo el dataframe y noté que mis coordenadas son un poco extrañas.

¿Tienes algunas ideas? ¿Necesito convertir las coordenadas?
Busqué pero no encontré una solución.
Gracias por tomar tu tiempo para responderme.

¡Espero que tengas un buen día y buen trabajo!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hola,

    Parece que el problema puede estar relacionado con el formato de tus coordenadas. Según la función head(), hay puntos en tus coordenadas que podrían estar causando el error.

    Es posible que necesites convertir tus coordenadas a valores numéricos antes de crear el SpatialPointDataFrame. Prueba el siguiente código:

    # Convertir coordenadas al formato numérico
    df$lon <- as.numeric(gsub("\\.", "", df$lon))/1000000
    df$lat <- as.numeric(gsub("\\.", "", df$lat))/1000000
    
    # Crear SpatialPointsDataFrame
    library(sp)
    coords <- cbind(df$lon, df$lat)
    species <- df$species
    spdf <- SpatialPointsDataFrame(coords, data.frame(species))
    

    Este código primero elimina los puntos en las coordenadas y luego las convierte al formato numérico dividiendo por un millón. Esto debería crear un SpatialPointsDataFrame con las coordenadas correctas.

    Espero que esto te sea útil. No dudes en contactarme si tienes más preguntas.

    ¡Saludos!

Comments are closed.