Импортируйте несколько шейп-файлов с различными наборами атрибутов в R и объединяйте их

У меня есть папка, содержащая много шейп-файлов, которые как-то связаны, но содержат различное количество атрибутов в соответствующей базе данных (dbf-File). Мне удалось загрузить их все в R, используя

files<-list.files(path=".",pattern=".shp$")
files<-sub(".shp","",files)
for(i in files){
  assign(i,readOGR(".",i))
}

Теперь проблема в том, что соответствующая информация различна, иногда содержит столбец, называемый "легенда", а иногда нет.

> 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, Имя столбца Symbol (A) также необходимо изменить в SYMBOL_NR

2 ответа

После этого

и при условии, что комментарий @Mark Peterson делает то, что вам нужно с данными, это может сделать то, что вы спрашиваете (если я правильно понял вопрос):

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

Если я правильно понимаю, вы хотите добавлять файлы вместе, а не объединять их (вы пытаетесь сделать так, чтобы за строками A следовали строки B, а не пытаться объединить информацию из A и B в одну строку).

Для этого я бы предложил bind_rows от dplyr (ты можешь использовать rename исправить колонку, пока вы на нее). Он должен соответствовать именам столбцов по мере необходимости и заполнять NAгде уместно.

New <-
  bind_rows(
    A@data %>%
      rename(SYMBOL_NR = Symbol)
    , B@data
  )
Другие вопросы по тегам