6

コメントとしてメタデータをスプレッドシートに追加し、後でRにこれらを無視させたいのですが。

私のデータは次の形式です

v1,v2,v3,
1,5,7,
4,2,1,#possible error,

(これははるかに長いことを除いて。最初のコメントは実際には上位5行のかなり外側に表示されscan、列数を決定するために使用されます)

私は試してきました:

read.table("data.name",header=TRUE,sep=",",stringsAsFactors=FALSE,comment.char="#")

しかしread.table(そして、そのことについてはcount.fields)、私は実際よりも1つ多くのフィールドを持っていると思います。私のデータフレームは「X」と呼ばれる空白の列で終わります。これは、私のスプレッドシートプログラムがすべての行の最後にコンマを追加しているためだと思います(上記の例のように)。

flush=TRUE(ヘルプファイルによると)「[...]最後のフィールドの後にコメントを入れることができます[...]」とはいえ、使用しても効果はありません。

使用しcolClasses=c(rep(NA,3),NULL)ても効果はありません。

後で列を削除することもできますが、これは一般的な方法のようですので、適切に行う方法を学びたいと思います。

ありがとう、

アンドリュー

4

2 に答える 2

6

ドキュメントから(?read.table):

colClasses文字。列に想定されるクラスのベクトル。必要に応じてリサイクルされるか、文字ベクトルに名前が付けられている場合、指定されていない値はNAと見なされます。

可能な値は、NA(type.convertが使用される場合のデフォルト)、 "NULL"(列がスキップされる場合)、アトミックベクトルクラスの1つ(論理、整数、数値、複素数、文字、raw)、または "factor "、"日付"または"POSIXct"。それ以外の場合は、「文字」から指定された仮クラスに変換するためのasメソッド(パッケージメソッドから)が必要です。

"NULL"を使用するのではなく、を使用するように指示されていることに注意してくださいNULL。実際、これは期待どおりに機能します。

con <- textConnection("
v1,v2,v3,
1,5,7,
4,2,1,#possible error,
")

read.table(con, header = TRUE, sep = ",",
           stringsAsFactors = FALSE, comment.char = "#",
           colClasses = c(rep(NA, 3), "NULL"))
#   v1 v2 v3
# 1  1  5  7
# 2  4  2  1
于 2012-10-07T18:55:38.890 に答える
4

コメント文字とデータ列の数に関する問題は、read.table()とは関係ありませんが、スプレッドシートとは関係ありません(Excelを使用しています)。read.tableのデフォルトの動作は、#をコメントの先頭として扱い、その後の動作を無視することです。エラーが発生する理由は、データ行の末尾にコンマが付いているためです。これは、read.tableにさらに多くのデータが続く必要があることを示しています。元の例を読む:

> read.table(text="v1, v2, v3,
+  1,5,7,
+  4,2,1,#possible error,", sep=",", header=TRUE)
  v1 v2 v3  X
1  1  5  7 NA
2  4  2  1 NA

コメントはデフォルトで無視され、4番目の列が作成され、Xというラベルが付けられます。事後にこの列を簡単に削除するか、@ flodelが言及する方法を使用するか、ファイルをRに読み込む前に末尾のコンマを削除できます。Excelでは、ファイルをcsv(コンマ区切り変数)として保存すると、コメントが4列目に表示され、Excelがコメントとして認識しないため、末尾のコンマが追加されます。ファイルをスペース区切りで保存すると、問題は解決します(スペースがデフォルトの区切り文字であるため、sep =引数を削除してください)。

> read.table(text="v1 v2 v3 
+    1 5 7 
+    4 2 1#possible error", header=TRUE)
  v1 v2 v3
1  1  5  7
2  4  2  1
于 2012-10-07T21:33:10.357 に答える