40 votos

¿Cómo identificar los atributos duplicados en un campo?

Tengo un shapefile de puntos con miles de puntos. Tiene un campo de código de identificación que se supone que es único. De vez en cuando, el empleado que introduce los datos escribe erróneamente el código de identificación, creando duplicados. Gracias por cualquier ayuda.

16voto

Rayo Puntos 71

Utilice el plugin Group Stats y establezca el ID como una clasificación de campo. Puede ver cuántas veces se ha introducido cada valor en la columna 'count'.

14voto

Net Citizen Puntos 1053

Una forma rápida (aunque poco elegante) de hacerlo es ir a las propiedades de la capa, seleccionar Estilo - Categorizado usando la columna que le interesa. Aplique esto, luego haga clic con el botón derecho del ratón en la capa en la ventana de capas y marque la casilla de verificación Mostrar recuento de características. A continuación, expanda la capa en la ventana de capas y podrá ver inmediatamente cuántas veces se ha introducido cada valor.

8voto

gregmac Puntos 12813

Si los identificadores son consecutivos, yo añadiría un nueva columna temporal con valores únicos como sugirió @Ship.shp y luego utilizar el constructor de consultas para buscar ID != uniqueID.

Eso devolvería los duplicados directamente. Después de arreglar los IDs originales, elimine la columna extra o repita todo el proceso según sea necesario - no está claro qué tipo de patrón deben coincidir sus IDs. Si sólo tienen que ser únicos, anote el último valor primero y luego puede editar los IDs malos en una iteración, sólo golpeando el número a medida que avanza.

5voto

Greg Puntos 61

Sí, me golpeé la cabeza contra la pared por un problema similar.

Aquí está mi script para la eliminación de las características con el mismo ID. Toma la primera característica con más de un atributo de índice y la escribe en una nueva clase de característica.

#Definition of inputs and outputs
# Written by: Gregor Skrt 
#==================================
##[Example scripts]=group
##input=vector
##unique_field=field input
##output=output vector

#Algorithm body
#==================================
from qgis.core import *
from PyQt4.QtCore import *
from processing.core.VectorWriter import VectorWriter

# "input" contains the location of the selected layer.
# We get the actual object, so we can get its bounds
layer = processing.getobject(input)
provider = layer.dataProvider()
fields = provider.fields()
writer = VectorWriter(output, None, fields, provider.geometryType(), layer.crs() )

inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()
nElement = 0
values = {}

value_field_index = layer.fieldNameIndex(unique_field)

feats = processing.getfeatures(layer)
nFeat = len(feats)

for inFeat in feats:
    progress.setPercentage(int((100 * nElement)/nFeat))
    nElement += 1
    inGeom = inFeat.geometry()
    attrs = inFeat.attributes()
    value = attrs[value_field_index]

    if value not in values:
    #to ne vem ce bo drzalo ???
        values[value]=[]
    outFeat.setGeometry(inGeom)
    outFeat.setAttributes(attrs)
    writer.addFeature(outFeat)
del writer

1 votos

To je dober komentar: "#to ne vem ce bo drzalo?"

3voto

Niall C. Puntos 1234

También puede usar la división por atributo y terminar con una tabla separada para cada valor.

Sin embargo, me gusta la sugerencia de Rayo. excepto que estatista no funciona como yo pensaba.
Da un recuento de valores únicos, pero no ayuda a saber cuáles son esos valores.
Otro software podría añadir un campo de recuento y permitirle exportarlo a csv u otro formato de hoja de cálculo.

statst
Mi sugerencia para la capa de división por atributo es en las herramientas de gestión de vectores
management too

split
Divida sus datos en un campo cualquiera y tendrá sus recuentos.
mucho más poco elegante que la solución de ship.ship

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X