Импортируйте несколько шейп-файлов с различными наборами атрибутов в 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
)