web-dev-qa-db-ja.com

重複した 'row.names'は許可されていませんエラー

次のような14列のcsvファイルをロードしようとしています。

StartDate, var1, var2, var3, ..., var14

このコマンドを発行すると:

systems <- read.table("http://getfile.pl?test.csv", header = TRUE, sep = ",")

エラーメッセージが表示されます。

row.namesの重複は許可されていません

最初の列名が問題を引き起こしているように思えます。ファイルを手動でダウンロードし、StartDate名をファイルから削除すると、Rはファイルを正常に読み取り、最初の列名をXに置き換えます。誰かが何が起こっているのか教えてもらえますか?ファイルは(カンマ区切り)csvファイルです。

61
george willy

次に、read.table notrow.namesを使用するよう指示します。

systems <- read.table("http://getfile.pl?test.csv", 
                      header=TRUE, sep=",", row.names=NULL)

そして今、あなたの行は単に番号が付けられます。

また、read.csvread.table引数を既に設定しているsep=','のラッパーであるheader=TRUEも見てください。

systems <- read.csv("http://getfile.pl?test.csv", row.names=NULL)
90

この関連する質問 は、問題を説明する?read.tableドキュメントの一部を示しています。

ヘッダーがあり、最初の行に含まれるフィールドの数が列の数よりも1つ少ない場合、入力の最初の列が行名に使用されます。それ以外の場合、row.namesが欠落している場合、行には番号が付けられます。

ヘッダー行には、ファイルの残りの部分よりも1列少ない可能性が高いため、read.tableは、最初の列が(重複する値を含むことができる)列ではなくrow.names(すべて一意である必要がある)であると想定します。これを修正するには、次の2つのソリューションのいずれかを使用します。

  1. ソースファイルのヘッダー行の先頭または末尾に区切り文字(つまり\tまたは,)を追加するか、
  2. データの末尾の区切り文字を削除する

選択は、データの構造によって異なります。

例:
ここでは、区切り文字が一致しないため、ヘッダー行はデータより1列少ないと解釈されます。

v1,v2,v3   # 3 items!!
a1,a2,a3,  # 4 items
b1,b2,b3,  # 4 items

これはデフォルトでどのように解釈されるかです:

   v1,v2,v3   # 3 items!!
a1,a2,a3,  # 4 items
b1,b2,b3,  # 4 items

最初の列(ヘッダーなし)の値は、row.namesとして解釈されます:a1およびb1。この列に重複が含まれている場合(完全に可能)、duplicate 'row.names' are not allowedエラーが発生します。

row.names = FALSEを設定した場合、シフトは発生しませんが、区切り文字が一致しないため、ヘッダーとデータのアイテム数が一致しません。

ソリューション1ヘッダーに末尾の区切り文字を追加します。

v1,v2,v3,  # 4 items!!
a1,a2,a3,  # 4 items
b1,b2,b3,  # 4 items

ソリューション2ヘッダー以外の行から余分な末尾の区切り文字を削除します。

v1,v2,v3   # 3 items
a1,a2,a3   # 3 items!!
b1,b2,b3   # 3 items!!
34
Brian D

CSVファイルを開くときにこのエラーが発生し、フィールドの1つにコンマが埋め込まれていました。フィールドの周りに引用符があり、その中にquote = ""を含むread.tableをカットアンドペーストしました。 quote = ""を取り出すと、read.tableのデフォルトの動作が引き継いで問題を解決しました。だから私はこれから行きました:

systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",", quote="")

これに:

systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",")
1
Odysseus Ithaca

このエラーの別の考えられる理由は、行全体が複製されていることです。その場合は、重複する行を削除することで問題を解決します。

0
abruin

私の場合、すべての行の終わりにコンマがありました。働いたものを取り除くことによって

0
ianaz

問題は複数の理由から発生する可能性があるようです。同じエラーが発生したときに、次の2つの手順が機能しました。

  1. ファイルをMS-DOS csvとして保存しました。 (以前は、csv、Excelスターター2010として保存されていました)。 notepad ++でcsvを開きました。一貫性のないcom睡状態はありませんでした(上記の一貫性@Brian)。
  2. 引数sep = "、"を使用していないことに注意してください。私はそれを使用しました(それがデフォルトの引数であるにもかかわらず!)
0
qqqqq

ここでの答え( https://stackoverflow.com/a/22408965/2236315 )@adrianoeschが役立つはずです(たとえば、「コメント(列名のシフト、データのコピー)、それは素晴らしいことです。」と「...データのコピーが必要です」が@Frankによって提案されました)。

一部のテキストエディタで開くと、ヘッダーフィールドの数がヘッダー行の下の列の数より少ないことがわかります。私の場合、データセットの最後のヘッダーフィールドの最後に「、」がありませんでした。

0
ximiki