2012-03-13 67 views
2

我得到包含以下數據的文件:R:奇怪地圖格式

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 

情節(DAT,類型= 'L')的結果在一個不錯的地圖。

我讀了第38頁的「應用空間數據分析與R」(Bivand,Pebesma,Gomez-Rubio; Springer 2008)中S中使用的舊的/簡單形式的線 - '對象',這似乎有與我的文件相似。這種格式將一條線定義爲「起點;終點; NA」三元組。

你知道這種格式嗎? 如何將其轉換爲sp對象?

在此先感謝

+0

該對象的類是什麼? – nograpes 2012-03-13 14:16:16

+0

我不知道這種格式,但你似乎有一個線段列表。 「$ x」和「$ y」中的所有條目的名稱總是「h」嗎?他們可能是一個候選人,以確定哪些線段屬於不同的線/多邊形。另一個問題是,在數據對象的整個長度上,結構是否總是相同的,即「h - h - NA」?如果不是的話,那裏可能還有其他的結構...... – yellowcap 2012-03-13 14:19:05

+0

這個類是'class'屬性 - 它是一個'bor' - 不管是什麼。現在,它是線條,點還是多邊形? – Spacedman 2012-03-13 15:40:40

回答

1

根據您的信息,這裏是一個possilbe的路要走:

假設你的數據所代表的線路,而且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)