Próbuję odczytać plik .csv do R i przy użyciu tej formuły:
pheasant<-read.table(file.choose(),header=TRUE,sep=",")
Otrzymuję ten komunikat ostrzegawczy:
"incomplete final line found by readTableHeader on 'C:\Documents and Settings..."
Jest kilka rzeczy, które moim zdaniem mogły spowodować to ostrzeżenie, ale niestety nie wiem wystarczająco dużo o R, aby samodzielnie zdiagnozować problem, więc pomyślałem, że opublikuję tutaj w nadziei, że ktoś inny zdiagnozuje to za mnie!
- plik .csv był pierwotnie plikiem programu Excel, który zapisałem w formacie .csv
- plik zawiera trzy kolumny danych
- każda kolumna danych ma różną długość, tj. w każdej kolumnie znajduje się inna liczba wartości
- Chcę porównać średnie (przy użyciu testu t lub równoważnego w zależności od rozkładu normalnego / nienormalnego) dwóch kolumn naraz, więc na przykład test t między wartościami z kolumny 1 i wartościami z kolumny 2, a następnie t- test wartości z kolumny 1 i kolumny 3 itp.
Każda pomoc lub sugestie byłyby bardzo mile widziane!
r
line-endings
read.csv
Kate
źródło
źródło
Odpowiedzi:
Komunikat wskazuje, że ostatni wiersz pliku nie kończy się znakiem końca wiersza (EOL) (znak końca wiersza (
\n
) lub powrót karetki + znak końca wiersza (\r\n
)). Pierwotnym zamiarem tej wiadomości było ostrzeżenie, że plik może być niekompletny; większość plików danych ma znak EOL jako ostatni znak w pliku.Rozwiązanie jest proste:
źródło
Problem jest łatwy do rozwiązania; to dlatego, że ostatnia linia MUSI być pusta.
Powiedz, jeśli Twoja treść jest
zmień to na
Dzisiaj spotkałem się z tego rodzaju problemem, gdy próbowałem użyć R do odczytania pliku JSON, używając poniższej komendy:
json_data<-fromJSON(paste(readLines("json01.json"), collapse=""))
; i rozwiązuję to moją powyższą metodą.
źródło
Warning message: In readLines(file) : incomplete final line found on 'apiAnaheim.R'
ostrzeżenie zostało rozwiązane przez dodanie na końcu jednej pustej linii. Nie wiem, dlaczego tak się dzieje.Czy naprawdę jesteś pewien, że wybrałeś plik .csv, a nie plik .xls? Mogę odtworzyć błąd tylko wtedy, gdy spróbuję odczytać plik .xls. Jeśli spróbuję czytać w pliku .csv lub innym pliku tekstowym, niemożliwe jest odtworzenie otrzymanego błędu.
readTableHead
jest funkcją c, która daje błąd. Próbuje odczytać w pierwszych n wierszach (standardowo pierwsze 5), aby określić typ danych. Reszta danych jest wczytywana za pomocąscan()
. Więc problemem jest format pliku.Jednym ze sposobów sprawdzenia tego jest ustawienie katalogu roboczego na katalog, w którym znajduje się plik. W ten sposób zobaczysz rozszerzenie czytanego pliku. Wiem, że w systemie Windows nie jest wyświetlane w standardzie, więc możesz uwierzyć, że jest to plik csv, a nie jest.
Następną rzeczą, którą powinieneś zrobić, to otworzyć plik w Notatniku lub Wordpadzie (lub innym edytorze) i sprawdzić, czy format jest równoważny z moim plikiem
test.csv
:Ten plik zawiera następującą ramkę danych:
Format csv zapisany w programie Excel oddziela wszystkie komórki przecinkiem. Puste komórki po prostu nie mają wartości.
read.table()
może z łatwością sobie z tym poradzić i dobrze rozpoznaje puste komórki.źródło
Użyj
readLines()
(zwarn = FALSE
), aby najpierw wczytać plik do wektora znakowego.Następnie użyj
text =
opcji, aby wczytać wektor do ramki danych za pomocąread.table()
źródło
Zdałem sobie sprawę, że udzielono kilku odpowiedzi, ale nie ma jeszcze prawdziwej poprawki.
Powodem, jak wspomniano powyżej, jest brak „końca wiersza” na końcu pliku CSV.
Podczas gdy prawdziwa poprawka powinna pochodzić od firmy Microsoft, obejście polega na otwarciu pliku CSV za pomocą edytora tekstu i dodaniu linii na końcu pliku (czyli naciśnięciu klawisza powrotu). Używam oprogramowania ATOM jako edytora tekstu / kodu, ale praktycznie każdy podstawowy edytor tekstu powinien działać.
W międzyczasie zgłoś błąd do firmy Microsoft.
Pytanie: Wydaje mi się, że jest to problem w biurze 2016. Czy ktoś ma problem na komputerze?
źródło
Otrzymałem tę samą wiadomość. Moja poprawka obejmowała: usunąłem wszystkie dodatkowe arkusze (zakładki) w pliku .csv, wyeliminowałem znaki nienumeryczne, ponownie zapisałem plik jako rozdzielany przecinkami i załadowałem do wersji R v 2.15.0 przy użyciu standardowego języka:
Jako dodatkowe zabezpieczenie zamknąłem oprogramowanie i uruchomiłem je ponownie przed załadowaniem pliku csv.
źródło
W różnych lokalizacjach europejskich, ponieważ przecinek służy jako przecinek dziesiętny, należy zamiast tego użyć funkcji read.csv2.
źródło
Rozwiązałem ten problem, zmieniając kodowanie w argumencie read.table z fileEncoding = "UTF-16" na fileEncoding = "UTF-8".
źródło
Problem, który opisujesz, wystąpił u mnie, kiedy zmieniłem nazwę na
.xlsx
as.csv
.Rozwiązaniem tego problemu było wybranie opcji „Zapisz jako”, a następnie
.csv
ponowne zapisanie jako .źródło
Mam ten problem raz, kiedy miałem pojedynczy cytat jako część nagłówka. Kiedy go usunąłem (tj. Zmieniłem nazwę odpowiedniego nagłówka kolumny z
Jimmy's data
naJimmys data
), funkcja nie zwróciła żadnych ostrzeżeń.źródło
Aby rozwiązać ten problem za pomocą samego R, po prostu użyłem
read.xlsx(..)
zamiast plikuread.csv()
. Działa jak marzenie!! Nie musisz nawet zmieniać nazwy. Zmiana nazwy xlsx na csv nie jest dobrym rozwiązaniem.źródło
Otwórz plik w edytorze tekstu lub notatniku ++ i pokaż formatowanie, np. W edytorze tekstu, który robisz, pokazujesz niewidoczne. W ten sposób możesz zobaczyć znaki nowej linii lub tabulatorów Często program Excel dodaje wszelkiego rodzaju tabulatory w niewłaściwych miejscach, a nie ostatni znak nowej linii, ale aby to zobaczyć, musisz pokazać symbole.
źródło
Moje obejście polegało na tym, że otworzyłem
csv
plik w edytorze tekstu, usunąłem nadmiarowe przecinki z ostatniej wartości, a następnie zapisałem plik. Na przykład dla następującego plikuUsuń przecinki po 6, a następnie zapisz plik.
źródło
Doświadczyłem podobnego problemu, jednak wydaje się to ogólnym ostrzeżeniem i może w rzeczywistości nie być związane ze znakiem końca linii. W moim przypadku dawał ten błąd, ponieważ plik, którego używałem, zawierał znaki cyrylicy, po zastąpieniu ich znakami łacińskimi błąd zniknął.
źródło
Wypróbowałem różne rozwiązania, takie jak użycie edytora tekstu, aby wstawić nowy wiersz i uzyskać znak końca wiersza, zgodnie z zaleceniami w górnej odpowiedzi powyżej. Niestety żaden z nich nie zadziałał.
Rozwiązanie, które ostatecznie nie działa dla mnie było bardzo proste: kopiować, wklejać zawartość pliku CSV do nowego pliku CSV puste, zapisany, a problem zniknął.
źródło