.csvファイルをRに読み込もうとしたときの「不完全な最終行」警告


114

私は.csvファイルをRに読み込もうとしており、次の式を使用しています:

pheasant<-read.table(file.choose(),header=TRUE,sep=",")

次の警告メッセージが表示されます。

"incomplete final line found by readTableHeader on 'C:\Documents and Settings..."

この警告を引き起こしたと思われることがいくつかありますが、残念ながら私はRについて自分で問題を診断するのに十分な知識を持っていないので、誰かが私に診断してくれることを願ってここに投稿したいと思いました!

  • .csvファイルはもともとExcelファイルで、.csv形式で保存しました
  • ファイルは3列のデータで構成されています
  • 各データ列の長さが異なります。つまり、各列に異なる数の値があります
  • 一度に2つの列の平均(正規分布/非正規分布に応じてt検定または同等のものを使用)を比較したいので、たとえば、列1の値と列2の値の間のt検定、次にt-列1と列3の値のテストなど

ヘルプや提案は真剣にいただければ幸いです!


1
@ケイト:ファイル自体にリンクしていただけませんか?アイデアはいくつかありますが、ファイルがないとどの問題なのかを判断するのは困難です。
Joris Meys、

こんにちはジョリス-すみません、どうすればいいのかわかりません...
ケイト

最初の列には1045の値があり、2番目の列には623の値があり、3番目の列には871があります... 彼らは、24.5など、すなわち23全体の半分の数字のすべての数値です...
ケイト・

1
read.tableはデータをデータ列に配置するので、これが問題だと思います。これには、同じ列長が必要です。
Ksilem卿11

1
@James:いいえ、違います。readTableHead(基礎となるc関数)は最初の5行を読み取ります。エラーはそこで発生します。
Joris Meys、

回答:


134

このメッセージは、ファイルの最後の行が行末(EOL)文字(ラインフィード(\n)またはキャリッジリターン+ラインフィード(\r\n))で終わっていないことを示しています。このメッセージの本来の目的は、ファイルが不完全である可能性があることを警告することでした。ほとんどのデータファイルには、ファイルの最後の文字としてEOL文字があります。

対処法は簡単です:

  1. ファイルを開く
  2. ファイルの最後の行に移動します
  3. カーソルをその行の終わりに置きます
  4. 押す return
  5. ファイルを保存します

2
ファイルの最後の行ではありません。これは、彼が読んでいるヘッダーで、最初の5行です。
Joris Meys、2011

@JorisMeysただし、エラーメッセージはファイルの最後の行を参照しています。上記の手順を実行すると、実際に警告が削除されます。
WorldGov

@WorldGov "不完全な最終行"は、さまざまな原因でポップアップする可能性がある警告(エラーではない)です。あなたの場合、それは最終的なEOLの欠如です。最後の行を読み取らないため、あなたのケースでは関数readTableHeaderによって警告がスローされた方法はありません。したがって、問題はOPの問題と同じではありません。
Joris Meys

20

問題は簡単に解決できます。それは最後の行が空でなければならないからです。

たとえば、コンテンツが

line 1,
line2

に変更

line 1,
line2
(empty line here)

今日、私は以下のコマンドを使用してRを使用してJSONファイルを読み取ろうとしたときに、このような問題に遭遇しました。

json_data<-fromJSON(paste(readLines("json01.json"), collapse=""))

; 上記の方法で解決します。


1
R APIをホストするために配管工を使用すると、同じ問題が発生しました。Warning message: In readLines(file) : incomplete final line found on 'apiAnaheim.R'最後に空行を1つ追加することで警告が解決されました。なぜこれが起こっているのかわかりません。
HoofarLotusX 2017

こっちも一緒。ありがとう。
メガデス

14

本当に.xlsファイルではなく.csvファイルを選択しましたか?.xlsファイルを読み取ろうとした場合にのみ、エラーを再現できます。.csvファイルまたはその他のテキストファイルを読み取ろうとすると、発生したエラーを再現できません。

> Data <- read.table("test.csv",header=T,sep=",")
> Data <- read.table("test.xlsx",header=T,sep=",")
Warning message:
In read.table("test.xlsx", header = T, sep = ",") :
  incomplete final line found by readTableHeader on 'test.xlsx'

readTableHeadエラーを返すC関数です。最初のn行(標準では最初の5行)を読み取って、データのタイプを判別しようとします。残りのデータは使用して読み込まれますscan()ます。したがって、問題はファイルの形式です。

見つける1つの方法は、作業ディレクトリをファイルがあるディレクトリに設定することです。そうすれば、読み込んだファイルの拡張子が表示されます。Windowsでは標準で表示されないので、csvでないと思われるかもしれません。

次に行うべきことは、ファイルをメモ帳またはワードパッド(または別のエディター)で開き、形式が私のファイルと同等であることを確認することですtest.csv

Test1,Test2,Test3
1,1,1
2,2,2
3,3,3
4,4,
5,5,
,6,

このファイルは次のデータフレームを提供します:

> read.table(testfile,header=T,sep=",")
  Test1 Test2 Test3
1     1     1     1
2     2     2     2
3     3     3     3
4     4     4    NA
5     5     5    NA
6    NA     6    NA

Excelで保存されたcsv形式は、すべてのセルをカンマで区切ります。空のセルには値がありません。read.table()これは簡単に処理でき、空のセルを問題なく認識します。


これがWindows 7環境であると仮定すると、Kateがデスクトップまたはフォルダー内にコピーされたファイルを見ると、.csvファイルのアイコンには「a」が付いていますが、.xlsxファイルにはもっと見えるアイコンがありますワークシートのように。これは、ファイルタイプをすばやく視覚的に判断する方法です。アイコンが大きいほど、デスクトップに保存したときに見やすくなります。:)
ミシェル

7

readLines()(を使用してwarn = FALSE)最初にファイルを文字ベクトルに読み込みます。

その後、text =オプションを使用して、ベクターをデータフレームに読み込むread.table()

    pheasant <- read.table( 
        text = readLines(file.choose(), warn = FALSE), 
        header = TRUE,  
        sep = "," 
    )

3

いくつかの回答は提供されていますが、実際の解決策はまだないことに気づきました。

上記の理由は、CSVファイルの最後に「行末」がないためです。

実際の修正はMicrosoftから提供されますが、ウォークスルーはテキストエディターでCSVファイルを開き、ファイルの最後に行を追加することです(別名、リターンキーを押します)。私はATOMソフトウェアをテキスト/コードエディタとして使用していますが、基本的にすべての基本的なテキストエディタで実行できます。

その間、マイクロソフトにバグを報告してください。

質問:Office 2016の問題のようです。誰かがPCで問題を抱えていますか?


2

同じメッセージを受け取りました。私の修正が含まれています:.csvファイルのすべての追加シート(タブ)を削除し、数値以外の文字を削除し、ファイルをコンマ区切りで再保存し、標準言語を使用してR v 2.15.0にロードしました。

ファイル名<-read.csv( "ファイル名"、header = TRUE)

追加の安全策として、csvをロードする前にソフトウェアを閉じて再度開きました。


2

さまざまなヨーロッパのロケールでは、コンマ文字が小数点として機能するため、代わりにread.csv2関数を使用する必要があります。



1

私は名前を変更したときに記述しているという問題が私のために起こった.xlsxように.csv

私のためにそれを修正したのは、「名前を付けて保存」して、それを.csvもう一度保存することでした。


1

ヘッダーの一部として単一引用符があったときに、この問題が発生しました。削除したとき(つまり、それぞれの列ヘッダーの名前をからJimmy's dataに変更したときJimmys data)、関数は警告を返しませんでした。


1

この問題をR自体で修正するためread.xlsx(..)に、の代わりに使用しましたread.csv()。魅力のように動作します!! 名前を変更する必要さえありません。xlsxの名前をcsvに変更することは、実行可能なソリューションではありません。


#Digvijay_Sawant、最後のコメントの意味がわかりませんが、ここでの他のすべての解決策とは異なり(私はそれらのほとんどすべてを試しました:厄介です!)、うまくいったのはあなただけです。
W Barker

1
@WBarker元の質問では、作成者はExcelをcsvに保存し、それを読み取ろうとしました。Excelをcsvにうまく変換すると、データ形式などが変更されたり、データが失われたりする可能性があります。Excelは「ファイルの終わり」をcsvとは異なる形式で保存するため、関数がファイルの終わりを突き止めるのが難しくなる場合があります。まあ、私は専門家ではありませんが、ただの考えです:-)
Digvijay Sawant

0

テキストラングラーまたはメモ帳++でファイルを開き、書式設定を表示します。たとえば、テキストラングラーでは非表示を表示します。そうすれば、改行またはタブ文字を確認できます。多くの場合、Excelはすべての種類のタブを間違った場所に追加し、最後の改行文字は追加しませんが、これを確認するにはシンボルを表示する必要があります。


0

私の回避策は、csvファイルをテキストエディターで開き、最後の値の余分なコンマを削除して、ファイルを保存することでした。たとえば、次のファイルの場合

Test1,Test2,Test3
1,1,1
2,2,2
3,3,3
4,4,
5,5,
,6,,

6の後のコンマを削除し、ファイルを保存します。


0

同様の問題が発生しましたが、これは一般的な警告であり、実際には行末文字とは関係がない可能性があります。私の場合、使用しているファイルにキリル文字が含まれていたため、このエラーが発生していました。ラテン文字に置き換えると、エラーは消えました。


0

テキストエディターを使用して新しい行を挿入し、行末文字を取得するなど、さまざまな解決策を試しました上記のトップアンサーで推奨されているをました。残念ながら、これらはどれも機能しませんでした。

最終的には動作しなかった解決策私にとっては非常に簡単だった:私は、新しい空白のCSVファイルにCSVファイルの内容を貼り付け、コピーして保存し、問題が消えていました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.