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 StartDate
uit 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.names
te 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.csv
wat een wrapper is voor read.table
die al de sep=','
en header=TRUE
argumenten 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.table
documentatie 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.table
ervan 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:
- een scheidingsteken toevoegen (bijv.
\t
of,
) aan de voorkant of het einde van uw koprij in het bronbestand, of, - 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: a1
en 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 = FALSE
instelt, 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_csv
van de readr
pakket
In mijn ervaring leidt de parameter row.names=NULL
in de functie read.csv
tot een verkeerde lezing van de
bestand als een kolomnaam ontbreekt, d.w.z. elke kolom wordt verschoven.
read_csv
lost 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.
- 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). - Ik merkte dat ik argument sep=”,”niet gebruikte. Ik gebruikte en het werkte (ook al is dat het standaardargument!)