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番目の列の読み取りをすべてスキップすることですか?
将来誰かが偶然これに出くわした場合の、この質問に対するより一般的な答えを以下に示します。インポートされたデータソース構造が変更された場合、これが機能しないため、「スキップ」を使用して列をジャンプすることはお勧めできません。
この例では、単にデフォルトの列タイプを設定してから、デフォルトとは異なる列を定義する方が簡単です。
たとえば、通常すべての列が「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」など)しかない場合に強力です。
はい。たとえば、数値データを強制的に文字として処理するには:
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