web-dev-qa-db-ja.com

Rで行名が繰り返されているcsvファイルを読み取る

行名が繰り返されているcsvファイルを読み込もうとしていますが、できませんでした。表示されるエラーメッセージはError in read.table(file = file, header = header, sep = sep, quote = quote, : duplicate 'row.names' are not allowed.

私が使用しているコードは:

S1N657 <- read.csv("S1N657.csv",header=T,fill=T,col.names=c("dam","anim","temp"))

私のデータの例を以下に示します:

did <- c("1N657","1N657","1N657","1N657","1N657","1N657","1N657","1N657","1N657","1N657")
aid <- c(101,102,103,104,105,106,107,108,109,110)
temp <- c(36,38,37,39,35,37,36,34,39,38)

data <- cbind(did,aid,temp)

どんな助けでもありがたいです。

23
baz

関数は重複する行名を参照しているので、それに対処する必要があります。おそらく最も簡単な方法は、row.names = NULLを使用することです。これにより、行番号が強制的に付けられます。つまり、最初の列を行番号としてではなく、最初の次元として、行番号( "1"で始まる連続した整数)を追加します。

read.csv("S1N657.csv", header=T,fill=T, col.names=c("dam","anim","temp"), row.names=NULL)
32
doug

これを試して:

S1N657 <- read.csv("S1N657.csv",header=T,fill=T,col.names=c("dam","anim","temp"), 
          row.names = NULL)[,-1]
3
kohske

最近私が抱えていた問題は、ヘッダー行の列数がデータ自体の列数と一致しないことでした。たとえば、データがタブ区切りで、すべてのデータ行に末尾のタブ文字が含まれていました。ヘッダー行(私が手動で追加したもの)はそうしませんでした。

行に自動番号付けをしたかったのですが、代わりに最初の行を行名として見ていました。ドキュメントから(私が追加した強調):

row.names行名のベクトル。これは、実際の行名を示すベクトル、または行名を含むテーブルの列を示す単一の数値、または行名を含むテーブル列の名前を示す文字列にすることができます。

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

Row.names = NULLを使用すると、強制的に行番号が付けられます。行がない、またはNULLの場合、row.namesは「自動」と見なされる(as.matrixによって保持されない)行名を生成します。

ヘッダー行に余分なタブ文字を追加すると、ヘッダー行の列数がデータ行と同じになるため、問題が解決します。

2
imichaeldotorg

あなたのcsvファイルはxlsxから変換されたものだと思います。最初の行の終わりにコンマを追加し、最後の行を削除して、完了

1
chen

小さなCSVで同じ「重複した 'row.names'は許可されていません」エラーが発生しました。問題は、14x14チャート領域の外側のどこかに、スペースやその他のデータを含むランダムなセルがあることでした。

「row.names = NULL」を実行すると、答えが見つかりました。テーブルの下に空白データの複数の行がありました(したがって、複数の重複する行名はすべて「空白」です)。

解決策は、テーブル領域外のすべての行/列を削除することでしたが、うまくいきました!

1
Nathan Kuhn

つまり、列名を確認するです。最初の行が列の名前である場合、1つ以上の名前が欠落している可能性があります。

例:

"a","b","c"
a,b,c,d
a,b,c,d

上記の例では、各行に4つの値があるのに3つの列しか指定されていないため、row.nameエラーが発生します。

これは、オンラインリソースからcsvを構築していたときに起こりました。

0
Travis Heeter

私の場合、問題はExcelファイルにありました。完全に整理されているように見えましたが、機能せず、常にメッセージがありました:Error in read.table(file = file, header = header, sep = sep, quote = quote, : duplicate 'row.names' are not allowed.

Excelマトリックスを新しい空のExcelシートにコピーして貼り付けようとしたところ、読み直そうとしましたが、うまくいきました。エラーメッセージはもうありません!

0
SkyR