duplicate " row.nazwy " nie są dozwolone błąd

Próbuję załadować plik csv, który ma 14 kolumn jak to:

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

Kiedy wydaję tę komendę:

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

Pojawia się komunikat o błędzie.

Duplicate row.nazwy nie są dozwolone

Wydaje mi się, że pierwsza nazwa kolumny powoduje problem. Kiedy ręcznie pobieram plik i usuwam nazwę StartDate z pliku, r pomyślnie odczytuje plik i Zastępuje pierwszą nazwę kolumny X. Czy ktoś może mi powiedzieć co się dzieje na? Plik jest plikiem csv (oddzielonym przecinkami).

 69
Author: zx8754, 2012-01-13

8 answers

To powiedz read.tabela Nie do użycia row.names:

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

A teraz twoje wiersze będą po prostu ponumerowane.

Spójrz również na read.csv, który jest opakowaniem dla read.table, który ustawia już argumenty sep=',' i header=TRUE, tak aby Twoje wywołanie uprościło się do

systems <- read.csv("http://getfile.pl?test.csv", row.names=NULL)
 105
Author: Dirk Eddelbuettel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-13 19:59:38

To powiązane pytanie wskazuje część ?read.table dokumentacji, która wyjaśnia twój problem:

Jeśli jest nagłówek, a pierwszy wiersz zawiera o jedno pole mniej niż liczba kolumn, używana jest pierwsza kolumna w wejściu dla nazw rzędów. W przeciwnym razie, jeśli wiersz.brakuje nazw, wiersze są ponumerowane.

Twój wiersz nagłówka prawdopodobnie ma o 1 mniej kolumn niż reszta pliku, więc read.table zakłada, że pierwsza kolumna jest wierszem.nazwy (które muszą być unikalne), a nie kolumna (która może zawierać zduplikowane wartości). Można to naprawić za pomocą jednego z następujących dwóch rozwiązań:

  1. dodawanie ogranicznika (ie \t lub ,) do przodu lub końca wiersza nagłówka w pliku źródłowym, or,
  2. usuwanie ograniczników końcowych w Twoich danych

Wybór zależy od struktury danych.

Przykład:
Tutaj wiersz nagłówka jest interpretowany jako mający o jeden mniej kolumny niż dane, ponieważ ograniczniki nie pasują:

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

Tak to jest interpretowane domyślnie:

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

Pierwsza kolumna (bez nagłówka) wartości są interpretowane jako wiersz.nazwy: a1 i b1. Jeśli ta kolumna zawiera duplikaty, co jest całkowicie możliwe, wtedy pojawia się błąd duplicate 'row.names' are not allowed.

Jeśli ustawisz row.names = FALSE, przesunięcie nie nastąpi, ale nadal masz niedopasowaną liczbę elementów w nagłówku i danych, ponieważ ograniczniki nie pasują.

Rozwiązanie 1 Dodawanie ogranicznika końcowego do nagłówka:

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

Rozwiązanie 2 Usuń nadmiarowy ogranicznik końcowy z wierszy innych niż nagłówek:

v1,v2,v3   # 3 items
a1,a2,a3   # 3 items!!
b1,b2,b3   # 3 items!!
 41
Author: Brian D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-13 16:30:18

Miałem ten błąd podczas otwierania pliku CSV i w jednym z pól osadzono przecinki. Pole miało cytaty wokół niego, a ja wyciąłem i wklejałem odczyt.tabela z quote = "" w niej. Raz wziąłem quote= "" out, domyślne zachowanie czytać.table przejął kontrolę i zabił problem. Więc wyszedłem z tego:

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

Do tego:

systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",")
 2
Author: Odysseus Ithaca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-20 16:08:00

W moim przypadku był przecinek na końcu każdej linii. Usuwając to działa

 2
Author: ianaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-05 07:37:23

Innym możliwym powodem tego błędu jest duplikowanie całych wierszy. W takim przypadku problem zostanie rozwiązany poprzez usunięcie zduplikowanych wierszy.

 1
Author: abruin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-08 22:44:46

Użyłem read_csv z readr pakiet

Z mojego doświadczenia wynika, że parametr row.names=NULL w funkcji read.csv doprowadzi do błędnego odczytu plik jeśli brakuje nazwy kolumny, tzn. każda kolumna zostanie przesunięta.

read_csv rozwiązuje to.

 1
Author: user2673238,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-21 13:27:52

Odpowiedź tutaj ( https://stackoverflow.com/a/22408965/2236315 ) by @ adrianoesch powinien pomóc (np. rozwiązuje " jeśli znasz rozwiązanie, które nie wymaga niewygodnego obejścia wymienionego w komentarzu (przesuń nazwy kolumn, skopiuj dane), byłoby świetnie."i "...wymóg kopiowania danych " zaproponowany przez @ Frank).

Zauważ, że jeśli otworzysz w jakimś edytorze tekstu, powinieneś zobaczyć, że liczba pól nagłówka jest mniejsza niż liczba kolumn pod nagłówkiem wiosłować. W moim przypadku zestaw danych miał "," brakuje na końcu ostatniego pola nagłówka.

 0
Author: ximiki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-20 06:19:05

Wydaje się, że problem może wynikać z więcej niż jednego powodu. Następujące dwa kroki zadziałały, gdy miałem ten sam błąd.

  1. zapisałem swój plik jako MS-DOS csv. (Wcześniej został zapisany jako csv, excel starter 2010 ). Otworzył plik csv w notepad++. No coma był niespójny (spójność jak opisano powyżej @Brian).
  2. zauważyłem, że nie używam argumentu sep="," . Użyłem i zadziałało (mimo że jest to domyślny argument!)
 0
Author: qqqqq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-17 06:20:18