在R中导入具有不同属性集的多个shapefile并组合它们

时间:2016-10-28 13:49:45

标签: r rgdal ogr

我有一个包含许多shapefile的文件夹,这些shapefile以某种方式相关但在相应的数据库(dbf-File)中包含不同数量的属性。 我设法使用

将它们全部加载到R中
files<-list.files(path=".",pattern=".shp$")
files<-sub(".shp","",files)
for(i in files){
  assign(i,readOGR(".",i))
}

现在问题是相应的信息是不同的,有时包含一个名为&#34; legend&#34;有时不会。

> str(A@data)
'data.frame':   1704 obs. of  7 variables:
 $ NRKART    : int  6 1 7 15 7 15 1 7 999 999 ...
 $ SCHRAFFUR : Factor w/ 2 levels "A","L": NA NA NA NA NA NA NA NA NA NA ...
 $ TKLE_NR   : int  151806 151801 151807 151815 151807 151815 151801 151807 151800 151800 ...
 $ Symbol    : Factor w/ 86 levels "1","10","100",..: 61 1 62 22 62 22 1 62 54 54 ...
 $ BGL       : Factor w/ 11 levels "0.0","1.1","1.2",..: 2 2 2 3 2 3 2 2 1 1 ...
 $ Shape_Area: num  4123982 20460030 436214 3904785 364182 ...
 $ Shape_Len : num  65111 43803 3152 19753 3174 ...

> str(B@data)
    'data.frame':   2705 obs. of  8 variables:
     $ NRKART    : int  22 14 48 42 27 14 14 1 999 48 ...
     $ SCHRAFFUR : Factor w/ 1 level "A": NA NA NA NA NA NA NA NA NA NA ...
     $ TKLE_NR   : int  471822 471814 471848 471842 471827 471814 471814 471801 471800 471848 ...
     $ BGL       : Factor w/ 15 levels "0.0","10.1","11.1",..: 11 11 13 12 12 11 11 6 1 13 ...
     $ SYMBOL_NR : Factor w/ 80 levels "107","161","176",..: 1 24 18 56 67 24 24 36 22 18 ...
     $ Legende   : Factor w/ 84 levels "00 Gewässerflächen",..: 23 15 49 43 28 15 15 2 1 49 ...
     $ Shape_Area: num  2300557 568922 2512166 1044624 13708524 ...
     $ Shape_Len : num  13251 3298 7387 5235 40118 ...

我首选合并两者的方法是使用

library(taRifx.geo)
New<-rbind(A,B,fix.duplicated.IDs=TRUE)

如何导入或重命名每个属性数据框,使其包含形状B的所有列。列符号(A)的名称也需要在SYMBOL_NR中更改

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你想要将文件附加在一起,而不是合并它们(你试图让A行跟随B行,而不是试图将A和B中的信息组合成一行)

为此,我建议bind_rows dplyr {你可以使用rename修复列。)它应根据需要匹配列名称,并在适当的位置填写NA

New <-
  bind_rows(
    A@data %>%
      rename(SYMBOL_NR = Symbol)
    , B@data
  )

答案 1 :(得分:0)

关注this

,并且假设@Mark Peterson的评论正在按照您的数据进行操作,这可以做你所要求的(如果我的问题是正确的):

newpolys <- rbind(A, B, makeUniqueIDs = TRUE) 
newdata  <- bind_rows(A@data %>%
                   rename(SYMBOL_NR = Symbol)
                  , B@data
newpolys@data = newdata
相关问题