R: странный формат карты - PullRequest
       26

R: странный формат карты

2 голосов
/ 13 марта 2012

Я получил файл, содержащий следующие данные:

str(dat)
List of 2
 $ x: Named num [1:28643] 2714769 2728569 NA 2728569 2740425 ...
  ..- attr(*, "names")= chr [1:28643] "h" "h" "" "h" ...
 $ y: Named num [1:28643] 925000 925000 NA 925000 925000 ...
  ..- attr(*, "names")= chr [1:28643] "h" "h" "" "h" ...
 - attr(*, "class")= chr [1:2] "bor" "list"

dat$x[1:10]
      h       h               h       h               h       h               h 
2714769 2728569      NA 2728569 2740425      NA 2740425 2751585      NA 2751585 

dat$y[1:10]
      h      h             h      h             h      h             h 
 925000 925000     NA 925000 925000     NA 925000 925000     NA 925000 

class(dat)
"bor"  "list"

table(names(dat$x))
          h 
  479 28164 

table(names(dat$y))
          h 
  479 28164 

plot (dat, type = 'l') приводит к хорошей карте.

Я читал о старой / простой форме линейных «объектов», используемой в S в «Прикладном анализе пространственных данных с помощью R» (Bivand, Pebesma, Gomez-Rubio; Springer 2008) на странице 38, которые, похоже, имеют сходство в мой файл. Этот формат определяет линию как триплет "начальная точка; конечная точка; NA".

Знаете ли вы этот формат? Как я могу преобразовать его в sp-объект?

Заранее спасибо

1 Ответ

1 голос
/ 14 марта 2012

Исходя из вашей информации, вот один из возможных способов:

Предполагая, что ваши данные представляют собой строки и что значения NA указывают на конец каждой строки, вы можете преобразовать свои данные в пространственные линии, выполнив следующие действия:

# Creating artificial data for the example
dat <- list()
dat$x <- rnorm(1000) + rep(c(rep(0, 99), NA), 10)
dat$y <- dat$x + rnorm(1000)

# For simplicity, convert to data frame
# (this would be the first step for you to do with your data)
mydat <- data.frame(x = dat$x, y = dat$y)

# Convert each part to a line, using the NA values as breaks
mylines <- list()
last <- 1
for(i in 1:nrow(mydat)){
    if(is.na(mydat$x[i])){
        print(i)
        mylines[[as.character(i)]] <- Lines(Line(mydat[last:(i-1),]), ID = as.character(i))
        last <- i+1
    }
}

# Convert to spatial lines object
mylines <- SpatialLines(mylines)

# Plot to see if it worked
plot(mylines)
...