dubbele ‘rij.namen’ zijn niet toegestaan fout

Ik probeer een csv-bestand met 14 kolommen als volgt te laden:

StartDate, var1, var2, var3, ..., var14

wanneer ik deze opdracht geef:

systems <- read.table("http://getfile.pl?test.csv", header = TRUE, sep = ",")

Ik krijg een foutmelding.

dubbele rijnamen zijn niet toegestaan

Het lijkt mij dat de eerste kolomnaam het probleem veroorzaakt. Wanneer ik het bestand handmatig download en de naam StartDateuit het bestand verwijder, leest R het bestand en vervangt de eerste kolomnaam door X. Kan iemand mij vertellen wat er aan de hand is? Het bestand is een (door komma’s gescheiden) csv-bestand.


Antwoord 1, autoriteit 100%

Vertel read.table nietom row.nameste gebruiken:

systems <- read.table("http://getfile.pl?test.csv", 
                      header=TRUE, sep=",", row.names=NULL)

en nu worden je rijen gewoon genummerd.

Kijk ook naar read.csvwat een wrapper is voor read.tabledie al de sep=','en header=TRUEargumenten zodat uw aanroep vereenvoudigt tot

systems <- read.csv("http://getfile.pl?test.csv", row.names=NULL)

Antwoord 2, autoriteit 39%

Deze gerelateerde vraagwijst op een deel van de ?read.tabledocumentatie die uw probleem uitlegt:

Als er een koptekst is en de eerste rij één veld minder bevat
dan het aantal kolommen, wordt de eerste kolom in de invoer gebruikt
voor de rijnamen. Als row.names ontbreekt, worden de rijen genummerd.

Uw koprij heeft waarschijnlijk 1 kolom minder dan de rest van het bestand en daarom gaat read.tableervan uit dat de eerste kolom de row.names is (die allemaal uniek moeten zijn), niet een kolom (die dubbele waarden kunnen bevatten). U kunt dit oplossen door een van de volgende twee oplossingen te gebruiken:

  1. een scheidingsteken toevoegen (bijv. \tof ,) aan de voorkant of het einde van uw koprij in het bronbestand, of,
  2. het verwijderen van eventuele achterste scheidingstekens in uw gegevens

De keuze hangt af van de structuur van uw gegevens.

Voorbeeld:
Hier wordt de koprij geïnterpreteerd als een kolom minder dan de gegevens omdat de scheidingstekens niet overeenkomen:

v1,v2,v3   # 3 items!!
a1,a2,a3,  # 4 items
b1,b2,b3,  # 4 items

Zo wordt het standaard geïnterpreteerd:

  v1,v2,v3   # 3 items!!
a1,a2,a3,  # 4 items
b1,b2,b3,  # 4 items

De waarden van de eerste kolom (zonder kop) worden geïnterpreteerd als row.names: a1en b1. Als deze kolom duplicaten bevat, wat heel goed mogelijk is, dan krijg je de fout duplicate 'row.names' are not allowed.

Als u row.names = FALSEinstelt, vindt de verschuiving niet plaats, maar heeft u nog steeds een niet-overeenkomend aantal items in de koptekst en in de gegevens omdat de scheidingstekens niet overeenkomen.

Oplossing 1
Scheidingsteken toevoegen aan koptekst:

v1,v2,v3,  # 4 items!!
a1,a2,a3,  # 4 items
b1,b2,b3,  # 4 items

Oplossing 2
Verwijder overtollige volgscheidingsteken uit niet-koptekstrijen:

v1,v2,v3   # 3 items
a1,a2,a3   # 3 items!!
b1,b2,b3   # 3 items!!

Antwoord 3, autoriteit 2%

Ik kreeg deze fout bij het openen van een CSV-bestand en een van de velden bevatte komma’s. Het veld had aanhalingstekens eromheen en ik had de read.table met quote=”” erin geknipt en geplakt. Toen ik quote=”” eruit haalde, nam het standaardgedrag van read.table het over en loste het probleem op. Dus ik ging van dit:

systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",", quote="")

naar dit:

systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",")

Antwoord 4, autoriteit 2%

In mijn geval stond er een komma aan het einde van elke regel. Door dat te verwijderen werkte


Antwoord 5

Een andere mogelijke reden voor deze fout is dat u volledige rijen heeft gedupliceerd. Als dat het geval is, wordt het probleem opgelost door de dubbele rijen te verwijderen.


Antwoord 6

Ik gebruikte read_csvvan de readrpakket

In mijn ervaring leidt de parameter row.names=NULLin de functie read.csvtot een verkeerde lezing van de
bestand als een kolomnaam ontbreekt, d.w.z. elke kolom wordt verschoven.

read_csvlost dit op.


Antwoord 7

Het antwoord hier (https://stackoverflow.com/a/22408965/2236315) van @adrianoesch zou moeten helpen (bijv. lost “Als u een oplossing kent die niet de lastige oplossing vereist die in uw opmerking wordt genoemd (verschuif de kolomnamen, kopieer de gegevens), dat zou geweldig zijn.” en “… vereisen dat de gegevens worden gekopieerd ” voorgesteld door @Frank).

Merk op dat als u in een teksteditor opent, u zou moeten zien dat het aantal koptekstvelden kleiner is dan het aantal kolommen onder de kopregel. In mijn geval miste de dataset een “,” aan het einde van het laatste kopveld.


Antwoord 8

Het lijkt erop dat het probleem meerdere oorzaken kan hebben. Het volgen van twee stappen werkte toen ik dezelfde fout had.

  1. Ik heb mijn bestand opgeslagen als MS-DOS csv. (Eerder werd het opgeslagen als gewoon csv, excel starter 2010).
    Csv geopend in Kladblok++. Geen enkele coma was inconsistent (consistentie zoals hierboven beschreven @Brian).
  2. Ik merkte dat ik argument sep=”,”niet gebruikte. Ik gebruikte en het werkte (ook al is dat het standaardargument!)

Other episodes