web-dev-qa-db-ja.com

.csvファイルをRに読み取ろうとすると、「不完全な最終行」警告

私は.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の値のテストなど。

どんな助けや提案も真剣に感謝します!

102
Kate

このメッセージは、ファイルの最終行が行末(EOL)文字(改行(\n)または復帰+改行(\r\n))で終わっていないことを示しています。このメッセージの当初の意図は、ファイルが不完全である可能性があることを警告することでした。ほとんどのデータファイルには、ファイルの最後の文字としてEOL文字があります。

治療法は簡単です:

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

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

あなたのコンテンツが

line 1,
line2

に変更する

line 1,
line2
(empty line here)

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

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

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

17
Vincent Jia

.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()はこれを簡単に処理でき、空のセルを適切に認識します。

14
Joris Meys

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

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

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

いくつかの答えが提供されているが、まだ実際には修正されていないことに気付きました。

前述の理由は、CSVファイルの最後に「行の終わり」がないことです。

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

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

質問:それはオフィス2016の問題であるように思えます。誰かがPCで問題を抱えていますか?

3
Nicolas Stifani

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

filename <-read.csv( "filename"、header = TRUE)

追加の安全対策として、csvを読み込む前にソフトウェアを閉じて開き直しました。

2
erik

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

2
yifan

.xlsxの名前を.csvに変更したときに、あなたが説明している問題が発生しました。

私にとってそれを修正したのは、「名前を付けて保存」してから.csvとして再度保存することでした。

1
Jase

Read.table引数のエンコーディングをfileEncoding = "UTF-16"からfileEncoding = "UTF-8"に変更することで、この問題を解決しました。

1

R自体を介してこの問題を修正するには、read.xlsx(..)ではなくread.csv()を使用しました。チャームのように動作します!!名前を変更する必要さえありません。 xlsxの名前をcsvに変更することは実行可能な解決策ではありません。

1
Digvijay Sawant

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

1
loukdelouk

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

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

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

0
Chase Wright

テキストラングラーまたはメモ帳++でファイルを開き、フォーマットを表示します。テキストラングラーでは、不可視を表示します。こうすると、改行文字やタブ文字を確認できます。Excelでは、最後の改行文字ではなく、さまざまな種類のタブが間違った場所に追加されることがよくありますが、これを表示するにはシンボルを表示する必要があります。

0
prepagam

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

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

0
Rens

私は同様の問題を経験しましたが、これは一般的な警告のように見え、実際には行末文字に関連していないかもしれません。私の場合、使用しているファイルにキリル文字が含まれていたため、このエラーが発生していましたが、ラテン文字に置き換えるとエラーが消えました。

0
Imer Muhović