2016-04-14 2 views
1

Я создаю шейп, но столбцы данных все имеют нули, например: 1,000000000000000Как создать шейп без конечных нулей с помощью R

Как ограничить конечные нули до 2 цифр, например: 1,00?

Пример кода:

library(rgdal) 
library(sp) 

coords <- cbind(c(631145, 631757, 631928, 631664, 631579, 631281), c(6967640, 6967566, 6968027, 6967985, 6968141, 6968009)) 
poly <- Polygons(list(Polygon(coords)),"coords") 
poly.sp <- SpatialPolygons(list(poly)) 

df<- data.frame(id = getSpPPolygonsIDSlots(poly.sp)) 
row.names(df) <- getSpPPolygonsIDSlots(poly.sp) 

spdf <- SpatialPolygonsDataFrame(poly.sp, data=df) 
[email protected]$VALUE <- 1 
writeOGR(spdf, "shapes", "testShape", driver="ESRI Shapefile", overwrite=TRUE) 

Когда я открываю файл .dbf в текстовом редакторе (Notepad ++) 1 отображается с замыкающими нулями.

+0

Почему это проблема? – Roland

+0

Я удивлен, что вы можете открывать файлы DBF в Notepad ++. Все они двоичные. Или у notepad ++ есть плагин для них? – Spacedman

+0

На самом деле, вы хотите целые числа? Или вы хотите хранить числа с плавающей запятой с некоторой пониженной точностью? Или просто запустите Notepad ++ с меньшим количеством десятичных знаков? Совсем не понятно. – Spacedman

ответ

1

Ваш файл формы DBF хранит его как реальное значение, и вы хотите, чтобы целые числа.

> ogrInfo("./shapes","testShape") 
Source: "./shapes", layer: "testShape" 
Driver: ESRI Shapefile; number of rows: 1 
Feature type: wkbPolygon with 2 dimensions 
Extent: (631145 6967566) - (631928 6968141) 
LDID: 87 
Number of fields: 2 
    name type length typeName 
1 id 4  80 String 
2 VALUE 2  24  Real 

R создает свои числовые столбцы по умолчанию в виде чисел с плавающей запятой. Класс столбец "числовой":

> class(spdf$VALUE) 
[1] "numeric" 

Изменить это "целое" L

> class(spdf$VALUE)="integer" 
> class(spdf$VALUE) 
[1] "integer" 

И переписать шейп:

> writeOGR(spdf, "shapes", "testShape", driver="ESRI Shapefile", overwrite=TRUE) 

А теперь

> ogrInfo("./shapes","testShape") 
Source: "./shapes", layer: "testShape" 
Driver: ESRI Shapefile; number of rows: 1 
Feature type: wkbPolygon with 2 dimensions 
Extent: (631145 6967566) - (631928 6968141) 
LDID: 87 
Number of fields: 2 
    name type length typeName 
1 id 4  80 String 
2 VALUE 0  10 Integer 

Целочисленное поле в DBF шейп-файла. Работа выполнена.

+0

Я думаю, что OP хочет 1.00, а не 1 ... – beetroot

+0

@beetroot да, прокомментировали для ясности. – Spacedman

+0

@Spacedman: В идеале я хочу, чтобы результат был 1,00. Каким будет класс для десятичной/двойной? – jhhwilliams