62

次を使用してRにデータセットをインポートしようとしていread.table()ます:

Dataset.df <- read.table("C:\\dataset.txt", header=TRUE)

しかし、次のエラー メッセージが表示されます。

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :
   line 1 did not have 145 elements

これは何を意味し、どうすれば修正できますか?

4

12 に答える 12

78

このエラーは一目瞭然です。データ ファイルの最初の行 (または を使用しているため、場合によっては 2 行目) にデータが欠落しているようですheader = TRUE

ミニ例を次に示します。

## Create a small dataset to play with
cat("V1 V2\nFirst 1 2\nSecond 2\nThird 3 8\n", file="test.txt")

R は行名と 2 つの列 (3 つの要素) を期待する必要があることを自動的に検出しますが、2 行目に 3 つの要素が見つからないため、エラーが発生します。

read.table("test.txt", header = TRUE)
# Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
#   line 2 did not have 3 elements

データ ファイルを見て、実際に問題があるかどうかを確認します。

cat(readLines("test.txt"), sep = "\n")
# V1 V2
# First 1 2
# Second 2
# Third 3 8

手動での修正が必要になる場合があります。または、「2 番目」の行の最初の値が最初の列にあり、他の値がNA. この場合、fill = TRUE問題を解決するのに十分です。

read.table("test.txt", header = TRUE, fill = TRUE)
#        V1 V2
# First   1  2
# Second  2 NA
# Third   3  8

R は、行名が欠落している場合でも、必要な要素の数を把握するのに十分スマートです。

cat("V1 V2\n1\n2 5\n3 8\n", file="test2.txt")
cat(readLines("test2.txt"), sep = "\n")
# V1 V2
# 1
# 2 5
# 3 8
read.table("test2.txt", header = TRUE)
# Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
#   line 1 did not have 2 elements
read.table("test2.txt", header = TRUE, fill = TRUE)
#   V1 V2
# 1  1 NA
# 2  2  5
# 3  3  8
于 2013-08-10T10:43:38.257 に答える
31

このエラーが発生し、欠落データがないように見えるデータセットを確認すると、いくつかのエントリに特殊文字「#」が含まれていることがわかりました。これにより、データのインポートが失敗しました。問題のあるセルから「#」を削除すると、データは問題なくインポートされました。

于 2014-06-14T15:41:09.720 に答える
9

Add Health データからいくつかのファイルを R にインポートしているときに、この問題が発生しました (参照: http://www.icpsr.umich.edu/icpsrweb/ICPSR/studies/21600?archive=ICPSR&q=21600 )。たとえば、タブ区切りの .tsv 形式の DS12 データ ファイルを読み取る次のコマンドは、次のエラーを生成します。

ds12 <- read.table("21600-0012-Data.tsv", sep="\t", comment.char="", 
quote = "\"", header=TRUE)

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, 
na.strings,  : line 2390 did not have 1851 elements

一部のファイルには、R がファイルを拒否する原因となるわずかなフォーマットの問題があるようです。少なくとも問題の一部は、アポストロフィの代わりに二重引用符を時折使用することで、行内の二重引用符の数が奇数になるようです。

いじった後、3つの可能な解決策を特定しました。

  1. テキスト エディターでファイルを開き、引用符文字 " のすべてのインスタンスを検索/置換します。つまり、すべての二重引用符を削除します。このタブ区切りデータの場合、これは、被験者からのコメントの一部の逐語的な抜粋が存在しないことを意味するだけです。私のデータ分析では問題にならなかった引用符で長くしました。

  2. ICPSR (上記のリンクを参照) または他のアーカイブに保存されたデータを使用する別の解決策は、データを新しい形式でダウンロードすることです。この場合の適切なオプションは、DS12 の Stata バージョンをダウンロードしてから、次のように read.dta コマンドを使用して開くことです。

    library(foreign)
    ds12 <- read.dta("21600-0012-Data.dta")
    
  3. 関連する解決策/ハックは、.tsv ファイルを Excel で開き、タブ区切りのテキスト ファイルとして再保存することです。これは、フォーマットの問題が R を不満にしているものを一掃するようです。

これらのいずれも、元の .tsv ファイルを使用して R の問題を完全に解決できないという点で理想的ではありませんが、データ ラングリングには複数のプログラムと形式の使用が必要になることがよくあります。

于 2015-04-30T14:42:36.463 に答える
2

解決策を見つけることができず、データに欠落要素がないことを知っている他の人のために:

Excel 2013 を使用してファイルを .csv として保存し、read.table() を使用して R にロードしようとすると、この問題が発生します。私が見つけた回避策は、データを Excel から直接 .txt ドキュメントに貼り付けてから、次のように開くことです。

read.table(file.choose(), sep="\t").

これが役立つことを願っています。

于 2016-01-09T19:09:56.897 に答える
0

この簡単な方法で問題が解決しました。データセットの内容をコピーし、空の Excel シートを開き、[形式を選択して貼り付け] -> [値] を選択して保存します。代わりに新しいファイルをインポートしてください。

(既存のソリューションをすべて試しましたが、どれもうまくいきませんでした。私の古いデータセットには、欠損値、スペース、特殊文字、または埋め込まれた数式がないように見えました。)

于 2019-10-08T17:27:11.523 に答える
0

上記のすべてのガイダンスに加えて、すべてのデータを確認することもできます。

単語間に空白がある場合は、それらを に置き換える必要があります"_"

しかし、それは私が自分の問題をどのように解決するかです。

于 2018-08-06T08:23:52.383 に答える