次の内容の「test.csv」というシンプルなcsvファイルがあります。
colA,colB,colC
1,"x",12
2,"y",34
3,"z",56
ColAの読み取りをスキップして、colBとcolCだけを読み取りたいとしましょう。読み込むファイルがたくさんあり、時にはcolAが別の名前で呼ばれることもありますが、colBとcolCは常に同じであるため、これを行うための一般的な方法が必要です。
Read_csvのドキュメントによると、これを行う1つの方法は、col_typesの名前付きリストを渡して、保持したい列のみに名前を付けることです。
read_csv('test.csv', col_types = list(colB = col_character(), colC = col_numeric()))
ColAについて言及しないことで、出力から削除されます。ただし、結果のデータフレームは次のとおりです。
Source: local data frame [3 x 3]
colA colB colC
1 1 x 12
2 2 y 34
3 3 z 56
私は何か間違っているのですか、それともread_csvのドキュメントが正しくありませんか?ヘルプファイルによると:
リストの場合、列ごとに1つの「コレクター」が含まれている必要があります。列のサブセットのみを読み取りたい場合は、名前付きリストを使用できます(名前によって列名が与えられます)。列が名前で言及されていない場合、その列は出力に含まれません。
そこに答えがあります、私は十分に検索しませんでした: https://github.com/hadley/readr/issues/132
どうやらこれは修正されたドキュメントの問題でした。この機能は最終的に追加される可能性がありますが、Hadleyは、1つの列タイプのみを更新し、他の列タイプは削除しない方が便利だと考えました。
更新:機能が追加されました
次のコードは reader documentation からのものです。
read_csv("iris.csv", col_types = cols_only( Species = col_factor(c("setosa", "versicolor", "virginica"))))
これにより、アヤメのデータセットの「種」列のみが読み取られます。特定の列のみを読み取るには、列の指定、つまりcol_factor
、col_double
なども渡す必要があります。
「read_csvのドキュメントによると、これを行う1つの方法は、col_typesの名前付きリストを渡して、保持する列にのみ名前を付けることです」
_WRONG: read_csv('test.csv', col_types=list(colB='c', colC='c'))
_
いいえ、ドキュメントは誤解を招く可能性があります。名前のないcolsが削除されるように指定するか(class = _'_'
_/col_skip()
)、または明示的にクラスをNULLとして指定する必要があります。
_read_csv('test.csv', col_types=list('*'='_', colB='c', colC='c'))
read_csv('test.csv', col_types=list('colA'='_', colB='c', colC='c'))
_