user3351370
user3351370

Reputation: 335

In read.table(): incomplete final line found by readTableHeader

I have a CSV when I try to read.csv() that file, I get the warning warning message:

In read.table(file = file, header = header, sep = sep, quote = quote,  :
  incomplete final line found by readTableHeader on ...

And I cannot isolate the problem, despite scouring StackOverflow and R-help for solutions.

This is the Dropbox link for the data: https://www.dropbox.com/s/h0fp0hmnjaca9ff/PING%20CONCOURS%20DONNES.csv

Upvotes: 31

Views: 102593

Answers (8)

Dax
Dax

Reputation: 13

Another option: sending an extra linefeed from R (instead of opening the file)

From Getting Data from Excel to R

cat("\n", file = file.choose(), append = TRUE)

Upvotes: 0

Meghana Chamarthy
Meghana Chamarthy

Reputation: 13

I had similar issue which didn't get resolved by the "enter method". After the mentioned error, I noticed the row count of the data frame was lesser than that of CSV. I noticed some non-alpha numeric values were hindering the import to R.

I followed Aurezio comment on [below link] (https://stackoverflow.com/a/29150226) to remove non-alpha numeric values (I included space)

Here the snippet:

Function CleanCode(Rng As Range)
    Dim strTemp As String
    Dim n As Long

    For n = 1 To Len(Rng)
        Select Case Asc(Mid(UCase(Rng), n, 1))
            Case 32, 48 To 57, 65 To 90
                strTemp = strTemp & Mid(UCase(Rng), n, 1)
        End Select
    Next
    CleanCode = strTemp
End Function

I then used CleanCode as a function for the final result

Upvotes: 0

Samuel-Rosa
Samuel-Rosa

Reputation: 381

Having a "proper" CSV file depends on the software that was used to generate it in the first place.

Consider Google Sheets. The warning will be issued every time that the CSV file -- downloaded via utils::download.file -- contains less than five lines. This likely is related to the fact that (utils:read.table):

The number of data columns is determined by looking at the first five lines of input (or the whole input if it has less than five lines), or from the length of col.names if it is specified and is longer.

In my short experience, if the data in the CSV file is rectangular, then the warning can be ignored.

Now consider LibreOffice Calc. There won't be any warnings, irrespective of the number of lines in the CSV file.

Upvotes: 2

Anju
Anju

Reputation: 19

Or you can simply open that excel file and save it as .csv file and voila that warning is gone.

Upvotes: -2

Quechua
Quechua

Reputation: 164

I had the same problem with .xls files. My solution is to save the file as a tab delimited .txt. Then you can also manually change the .txt extension to .xls, then you can open the dataframe with read.delim.

This is very rude way to overcome the issue anyway.

Upvotes: 1

aditya harbola
aditya harbola

Reputation: 31

I faced the same problem while creating a data matrix in notepad. So i came to the last row of data matrix and pressed enter. Now i have a "n" line data matrix and a new blank line with cursor at the starting of "n+1" line. Problem solved.

Upvotes: 3

Aashu
Aashu

Reputation: 1287

As explained by Hendrik Pon,The message indicates that the last line of the file doesn't end with an End Of Line (EOL) character (linefeed (\n) or carriage return+linefeed (\r\n)).

The remedy is simple:

  • Open the file
  • Navigate to the very last line of the file
  • Place the cursor the end of that line
  • Press return/enter
  • Save the file

so here is your file without warning

df=read.table("C:\\Users\\Administrator\\Desktop\\tp.csv",header=F,sep=";")
 df
    V1               V2               V3               V4               V5               V6               V7               V8               V9              V10
1 Date 20/12/2013 09:04 20/12/2013 09:08 20/12/2013 09:12 20/12/2013 09:16 20/12/2013 09:20 20/12/2013 09:24 20/12/2013 09:28 20/12/2013 09:32 20/12/2013 09:36
2    1           1,3631           1,3632           1,3634           1,3633            1,363           1,3632           1,3632           1,3632           1,3629
3    2          0,83407          0,83408          0,83415          0,83416          0,83404          0,83386          0,83407          0,83438          0,83472
4    3           142,35           142,38           142,41            142,4           142,41           142,42           142,39           142,42            142,4
5    4           1,2263          1,22635          1,22628          1,22618          1,22614          1,22609          1,22624          1,22643           1,2265

But i think you should not read in this way because you have to again reshape the dataframe,thanks.

Upvotes: 31

Karl Forner
Karl Forner

Reputation: 4414

This is not a CSV file, each line is a column, you can parse it manually, e.g.:

file <- '~/Downloads/PING CONCOURS DONNES.csv'
lines <- readLines(file)
columns <- strsplit(lines, ';')
headers <- sapply(columns, '[[', 1)
data <- lapply(columns, '[', -1)
df <- do.call(cbind, data)
colnames(df) <- headers
print(head(df))

Note that you can ignore the warning, due that the last end-of-line is missing.

Upvotes: 2

Related Questions