Пространственные данные с дубликатами и отсутствующими точками - PullRequest
2 голосов
/ 26 октября 2011

Я анализирую данные обследования яиц.Данные доступны из разных точек Северного моря, некоторые станции записываются дважды в разные даты.Море должно быть покрыто квадратами 0,5 х 0,5 градуса.У меня есть два вопроса, для которых я не смог найти никакого решения:

  1. Как заменить точки с дублированными точками и разными датами со средним значением?Я знаю, как удалить дубликаты или как заменить их на макс. Или мин., Но не смог найти способ, как рассчитать среднее значение.

  2. Как рассчитать интерполированные значения для отсутствующих точекна основе соседних ячеек.Интерполированные значения должны рассчитываться как длинные и только в том случае, если по крайней мере две записанные точки находятся рядом.способ, как сказать R, когда интерполировать, а когда нет.

    Пример данных:

    egg_data <- structure(list(Latitude = c(54.25, 54.25, 54.25, 54.25, 54.25, 
    54.25, 54.25, 54.25, 54.25, 54.25, 54.25, 54.25, 54.25, 54.25, 
    55.25, 55.25, 55.25, 55.25, 55.25, 55.25, 55.25, 55.25, 55.25, 
    55.25, 55.25, 55.25, 55.25, 55.25, 55.25, 55.25, 55.25, 55.25, 
    55.25, 55.25, 55.25, 55.25, 55.25, 55.25, 55.25, 55.25, 55.25, 
    55.25, 55.25, 55.25, 54.25, 54.25, 54.25, 53.25, 58.25, 57.75, 
    57.25, 57.25, 57.25, 57.25, 57.25, 57.25, 57.25, 57.25, 56.75, 
    56.75, 56.75, 56.75, 56.75, 56.75, 56.75, 56.75, 56.75, 56.75, 
    56.75, 56.75, 56.75, 56.25, 56.25, 56.25, 56.25, 56.25, 56.25, 
    56.25, 56.25, 56.25, 56.25, 56.25, 56.25, 56.25, 56.25, 56.25, 
    56.25, 56.75, 56.75, 56.75), Longitude = c(6.25, 5.25, 5.25, 
    4.25, 4.25, 3.25, 3.25, 2.25, 2.25, 1.25, 1.25, 0.25, 0.25, 0.25, 
    0.25, 0.25, 0.25, 0.25, 1.25, 1.25, 2.25, 2.25, 3.25, 3.25, 4.25, 
    4.25, 5.25, 5.25, 5.25, 5.25, 4.25, 4.25, 3.25, 3.25, 2.25, 2.25, 
    1.25, 1.25, 0.25, 0.25, 0.25, 0.25, 1.25, 1.25, 0.25, 0.25, 0.25, 
    0.25, 3.25, 3.25, 3.25, 2.75, 2.25, 1.75, 1.25, 0.75, 0.25, 0.25, 
    0.25, 0.25, 0.75, 1.25, 1.75, 2.25, 2.75, 3.25, 3.75, 4.25, 4.75, 
    5.25, 5.75, 6.25, 5.75, 5.25, 4.75, 4.25, 3.75, 3.25, 2.25, 1.75, 
    1.25, 0.75, 0.25, 0.25, 0.75, 1.25, 1.75, 1.75, 1.25, 0.75), 
        Eggs = c(9L, 6L, 4L, 20L, 57L, 14L, 35L, 18L, 4L, 1L, 3L, 
        100L, 1L, 201L, 0L, 51L, 52L, 23L, 19L, 4L, 5L, 23L, 11L, 
        18L, 7L, 7L, 14L, 6L, 3L, 4L, 20L, 13L, 19L, 5L, 16L, 23L, 
        28L, 11L, 9L, 12L, 19L, 62L, 6L, 3L, 15L, 110L, 57L, 0L, 
        14L, 3L, 3L, 8L, 94L, 62L, 7L, 19L, 511L, 59L, 283L, 308L, 
        20L, 44L, 61L, 24L, 10L, 10L, 15L, 6L, 8L, 12L, 32L, 2L, 
        5L, 10L, 21L, 4L, 1L, 19L, 3L, 4L, 4L, 17L, 51L, 108L, 1213L, 
        132L, 4L, 0L, 0L, 0L)), .Names = c("Latitude", "Longitude", 
    "Eggs"), class = "data.frame", row.names = c("1", "2", "3", "4", 
    "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", 
    "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", 
    "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", 
    "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", 
    "49", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", 
    "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "70", 
    "71", "72", "73", "74", "75", "76", "77", "78", "79", "80", "81", 
    "82", "83", "84", "85", "86", "87", "88", "89", "90"))
    

    Большое спасибо !!

1 Ответ

1 голос
/ 26 октября 2011

Добавить коэффициент для каждого местоположения

egg_data <- в пределах (egg_data, Местоположение <- вставить ("(", Широта, ",", Долгота, ")", sep = "") ) </del>

РЕДАКТИРОВАТЬ: Нет смысла в этом задумываться, так как мы хотим в ближайшее время полностью изменить процесс.

egg_data <- within(egg_data, 
  Location <- paste(Latitude, Longitude, sep = ",")
)

Тогда есть множество способов получить среднее.

means_by_location <- with(egg_data, tapply(Eggs, Location, mean))

или

library(plyr)
means_by_location2 <- ddply(egg_data, .(Location), summarise, Mean.eggs = mean(Eggs))

или

means_by_location3 <- aggregate(Eggs ~ Location, egg_data, mean)

или

means_by_location4 <- with(egg_data, by(Eggs, Location, mean))

РЕДАКТИРОВАТЬ: для следующего бита, вы хотите иметь результат в кадре данных, поэтому используйте метод 2 или 3.

Добавьте широту и долготу обратно в ваш новый набор данных. (Множество способов сделать это.)

lat_long <- strsplit(means_by_location2$Location, ",")
means_by_location2$Latitude <- sapply(lat_long, function(x) x[1]) 
means_by_location2$Longitude <- sapply(lat_long, function(x) x[2])

Это ваш первый вопрос.


По второму вопросу вам нужно подумать немного больше. Взгляните на участок яиц по локации.

library(ggplot2)
(p <- ggplot(means_by_location2, aes(Longitude, Latitude, colour = log10(Mean.eggs  +1))) +
  geom_point() +
  scale_colour_gradient(low = "#FFFFFF", high = "#0000FF", space = "Lab")
)

Вы интерполируете с севера на юг или с востока на запад или со всеми соседними точками? Есть много разных возможностей, и они могут иметь разные ответы. Нетривиальная задача сказать, какая интерполяция лучше всего.

...