web-dev-qa-db-ja.com

多数の列がある場合にreadr :: read_csv()を使用してデータをインポートするときに列タイプをオーバーライドする

Rのreadr :: read_csvを使用してcsvファイルを読み取ろうとしています。インポートするcsvファイルには約150列あり、この例では最初の数列のみを含めています。デフォルトのタイプ(read_csvを実行するときの日付)の2番目の列を文字または他の日付形式にオーバーライドしようとしています。

GIS Join Match Code Data File Year  State Name  State Code  County Name County   Code   Area Name   Persons: Total
G0100010    2008-2012   Alabama 1   Autauga County  1   Autauga County, Alabama 54590

df <- data.frame("GIS Join Match Code"="G0100010", "Data File" = "2008-2012", "State" = "Alabama", "County" = "Autauga County", "Population" = 54590)

問題は、readr :: read_csvを使用する場合、col_typesでオーバーライドするときにすべての変数を使用する必要があるように見えることです(以下のエラーを参照)。それは、150列すべてを個別にオーバーライドすることを指定する必要があります。私の場合、「Data File Year」列をオーバーライドするだけです。

省略された列は自動的に解析されることを理解していますが、これは分析には問題ありません。ダウンロードしたファイル(たとえば、「Data File Year」、「State Code」など)に列名にスペースがあるため、さらに複雑になると思います。

tempdata <- read_csv(df, col_types = "cc")
Error: You have 135 column names, but 2 columns

私が推測するその他のオプションは、可能であれば、2番目の列の読み取りをすべてスキップすることですか?

27
rajvijay

将来誰かが偶然これに出くわした場合の、この質問に対するより一般的な答えを以下に示します。インポートされたデータソース構造が変更された場合、これが機能しないため、「スキップ」を使用して列をジャンプすることはお勧めできません。

この例では、単にデフォルトの列タイプを設定してから、デフォルトとは異なる列を定義する方が簡単です。

たとえば、通常すべての列が「d」であるが、日付列は「D」である必要がある場合、次のようにデータをロードします。

  read_csv(df, col_types = cols(.default = "d", date = "D"))

または、たとえば、列の日付を「D」、列の「xxx」を「i」にする場合は、次のようにします。

  read_csv(df, col_types = cols(.default = "d", date = "D", xxx = "i"))

上記の「デフォルト」の使用は、複数の列があり、特定の例外(「日付」や「xxx」など)しかない場合に強力です。

36
Nick

はい。たとえば、数値データを強制的に文字として処理するには:

examplecsv = "a,b,c\n1,2,a\n3,4,d"
read_csv(examplecsv)
# A tibble: 2 x 3
#      a     b     c
#  <int> <int> <chr>
#1     1     2     a
#2     3     4     d
read_csv(examplecsv, col_types = cols(b = col_character()))
# A tibble: 2 x 3
#      a     b     c
#  <int> <chr> <chr>
#1     1     2     a
#2     3     4     d

選択肢は次のとおりです。

col_character() 
col_date()
col_time() 
col_datetime() 
col_double() 
col_factor() # to enforce, will never be guessed
col_integer() 
col_logical() 
col_number() 
col_skip() # to force skip column

詳細: http://readr.tidyverse.org/articles/readr.html

9
Lukasz