无法使用write.dbf处理矩阵/数组列

时间:2013-02-13 23:46:02

标签: r gis spatial shapefile dbf

希望我能为这个问题得到一切。第一次对我而言,描述它有点棘手。

我想在dbf文件中添加一些属性,然后保存它以便在qgis中使用。关于选举和数据是11个政党在绝对和相对价值方面的投票。我为此使用了shapefiles包,但也只是使用了外来的。

我的系统:RStudio 0.97.311,R 2.15.2,shapefile 0.7,外国0.8-52,ubuntu 12.04

尝试#1 =>没问题

shpDistricts <- read.shapefile(filename)
shpDataDistricts <- shpDistricts$dbf[[1]]
shpDataDistricts <- shpDataDistricts[, -c(3, 4, 5)] # delete some columns
shpDistricts$dbf[[1]] <- shpDataDistricts
write.shapefile(shpDistricts, filename))

尝试#2 =&gt; “get中的错误(”write.dbf“,”package:foreign“)(dbf $ dbf,out.name):无法处理矩阵/数组列”

shpDistricts <- read.shapefile(filename)
shpDataDistricts <- shpDistricts$dbf[[1]]
shpDataDistricts <- shpDataDistricts[, -c(3, 4, 5)] # delete some columns
shpDataDistricts <- cbind(shpDataDistricts, votesDistrict[, 2]) # add a new column
names(shpDataDistricts)[5] <- "SPOE"
shpDistricts$dbf[[1]] <- shpDataDistricts
write.shapefile(shpDistricts, filename))

write函数返回“get in get(”write.dbf“,”package:foreign“)(dbf $ dbf,out.name):无法处理矩阵/数组列”

所以只需在data.frame中添加一个列(整数),write.dbf函数就不能再写出来了。我正在这个简单的问题上调试3个小时。通过打开shapefile和dbf文件尝试使用shapefiles包,一直都是同样的问题。

当我直接使用外包(read.dbf)时。

如果我保存没有投票数据的dbf文件(只有步骤1 + 2的小适应),这没问题。它必须与投票数据合并。

2 个答案:

答案 0 :(得分:1)

我使用rgdal在R中使用shapefile时得到了相同的错误消息(“get(”write.dbf“...)中的错误。我在shapefile中添加了一列,然后尝试保存输出并得到了我将这个列作为数据框添加到shapefile中,当我通过as.factor()将其转换为一个因子时,错误就消失了

shapefile $ column&lt; - as.factor(additional.column)

writePolyShape(shapefile,filename)

答案 1 :(得分:1)

问题是write.dbf无法将数据帧写入属性表。所以我尝试将其更改为角色数据

我最初的错误代码是:

d1<-data.frame(as.character(data1))
colnames(d1)<-c("county") #using rbind should give them same column name
d2<-data.frame(as.character(data2))
colnames(d2)<-c("county")
county<-rbind(d1,d2)
dbfdata$county <- county
write.dbf(dbfdata, "PANY_animals_84.dbf") **##doesn't work** 
##Error in write.dbf(dataname, ".bdf")cannot handle matrix/array columns

然后我把所有东西改成了角色,它有效! 正确的代码是:

d1<-as.character(data1)
d2<-as.character(data2)
county<-c(d1,d2)
dbfdata$county <- county
write.dbf(dbfdata, "filename")

希望它有所帮助!