我有一个包含许多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中更改
答案 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