не может обрабатывать столбцы матрицы/массива с помощью write.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))

try #2 => "ошибка в 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))

функция записи возвращает "ошибку в get("write.dbf", "package:foreign")(dbf$dbf, out.name): невозможно обработать столбцы матрицы/массива"

поэтому, просто добавив столбец (целое число) в data.frame, функция write.dbf больше не сможет записывать. сейчас занимаюсь отладкой в ​​течение 3 часов по этой простой проблеме. попробовал его с пакетом шейп-файлов, открыв шейп-файл и файл dbf, все время та же проблема.

Когда я использую внешний пакет напрямую (read.dbf).

если я сохраню dbf-файл без данных голосования (только с небольшими адаптациями из шага 1+2), это не проблема. Это должно быть связано со слиянием с данными голосования.


person stefankasberger    schedule 13.02.2013    source источник


Ответы (2)


Я получил такое же сообщение об ошибке ("ошибка в get("write.dbf"...) при работе с шейп-файлами в R с помощью rgdal. Я добавил столбец в шейп-файл, затем попытался сохранить вывод и получил ошибку. Я был добавлен столбец в шейп-файл как фрейм данных, когда я преобразовал его в фактор через as.factor(), ошибка исчезла.

shapefile$column ‹- as.factor(дополнительный.столбец)

writePolyShape (шейп-файл, имя файла)

person user2359219    schedule 07.05.2013
comment
в моем случае это тоже была проблема с переменным типом. хотел написать переменные массива вместо числовых. преобразовал столбцы, и это сработало. Спасибо за вашу помощь! - person stefankasberger; 09.05.2013

Проблема в том, что 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")

Надеюсь, поможет!

person Yanni Cao    schedule 08.07.2015