ファイル入出力

公開

2026年4月24日

更新日

2026年5月16日

データファイルの入出力(特にCSVファイルとExcelファイル)について説明します。

外部ファイルの入力

外部ファイルの読み込み

分析に使うデータは、Microsoft Excel形式など、外部ファイルとして準備することが多いと思います。 ここでは、CSV(Comma-Separated Values:カンマ区切り値)ファイルとExcelファイルをRで読み込む方法を説明します。

サンプルファイルとして、saga.csvsaga.xlsxの2つのファイルを用意したので、下のリンクからダウンロードしてください。 ダウンロードしたファイルは、ワーキングディレクトリの中に[data]というフォルダを作成し、その中に保存することにしましょう。

ダウンロードしたファイルを開いて、それぞれの中身を確認してみてください。

図:Excelファイルの例

用意したファイルには、佐賀県内20市町の人口および世帯数のデータが記載されています。 きれいなスプレッドシート型のデータになっています。 このファイルをRにデータフレームとして読み込みます。

CSVファイル

Rには、read.csvというCSVファイルを読み込むための関数が用意されています。 しかし、ここでは、より柔軟性の高いreadrパッケージのread_csv関数を使います。

library(readr)
dat <- read_csv("data/saga.csv")
Rows: 20 Columns: 6
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): name
dbl (5): code, population, pop_male, pop_female, households

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
dat
# A tibble: 20 × 6
     code name       population pop_male pop_female households
    <dbl> <chr>           <dbl>    <dbl>      <dbl>      <dbl>
 1 412015 佐賀市         236372   111453     124919      93306
 2 412023 唐津市         122785    57547      65238      43872
 3 412031 鳥栖市          72902    34799      38103      27630
 4 412040 多久市          19749     9146      10603       6847
 5 412058 伊万里市        55238    26395      28843      19698
 6 412066 武雄市          49062    23178      25884      16932
 7 412074 鹿島市          29684    13920      15764      10124
 8 412082 小城市          44259    20823      23436      14769
 9 412091 嬉野市          27336    12667      14669       9214
10 412104 神埼市          31842    15172      16670      10913
11 413275 吉野ヶ里町      16411     8136       8275       5891
12 413411 基山町          17501     8266       9235       6321
13 413453 上峰町           9283     4379       4904       3260
14 413461 みやき町        25278    11969      13309       8638
15 413879 玄海町           5902     3035       2867       1918
16 414018 有田町          20148     9356      10792       6900
17 414239 大町町           6777     3077       3700       2560
18 414247 江北町           9583     4497       5086       3225
19 414255 白石町          23941    11133      12808       7253
20 414417 太良町           8779     4125       4654       2838
列ごとのデータ型を指定する

自治体コードのcode列が数字(dbl)になっています。 read_csv関数は、読み込んだデータからそれらのデータ型を推論します。 この場合は、自治体コードなので文字型として読み込んで欲しいのですが、そうなっていません。

これを防ぐには、以下の例のように、あらかじめ列ごとのデータ型を指定しておくことが有効です。 ここで、データ型(col_types)の”c”は文字(chracter)型を、“d”は数値(double:倍精度)型であることを意味します(詳しくはread_csv関数のヘルプ記事をご覧ください)。

dat <- read_csv("data/saga.csv", col_types = "ccdddd")
dat
# A tibble: 20 × 6
   code   name       population pop_male pop_female households
   <chr>  <chr>           <dbl>    <dbl>      <dbl>      <dbl>
 1 412015 佐賀市         236372   111453     124919      93306
 2 412023 唐津市         122785    57547      65238      43872
 3 412031 鳥栖市          72902    34799      38103      27630
 4 412040 多久市          19749     9146      10603       6847
 5 412058 伊万里市        55238    26395      28843      19698
 6 412066 武雄市          49062    23178      25884      16932
 7 412074 鹿島市          29684    13920      15764      10124
 8 412082 小城市          44259    20823      23436      14769
 9 412091 嬉野市          27336    12667      14669       9214
10 412104 神埼市          31842    15172      16670      10913
11 413275 吉野ヶ里町      16411     8136       8275       5891
12 413411 基山町          17501     8266       9235       6321
13 413453 上峰町           9283     4379       4904       3260
14 413461 みやき町        25278    11969      13309       8638
15 413879 玄海町           5902     3035       2867       1918
16 414018 有田町          20148     9356      10792       6900
17 414239 大町町           6777     3077       3700       2560
18 414247 江北町           9583     4497       5086       3225
19 414255 白石町          23941    11133      12808       7253
20 414417 太良町           8779     4125       4654       2838

Excelファイル

Excelファイルを読むには、readxlライブラリのread_excel関数が便利です。

library(readxl)
dat1 <- read_excel("data/saga.xlsx")
dat1
# A tibble: 20 × 6
   code   name       population pop_male pop_female households
   <chr>  <chr>           <dbl>    <dbl>      <dbl>      <dbl>
 1 412015 佐賀市         236372   111453     124919      93306
 2 412023 唐津市         122785    57547      65238      43872
 3 412031 鳥栖市          72902    34799      38103      27630
 4 412040 多久市          19749     9146      10603       6847
 5 412058 伊万里市        55238    26395      28843      19698
 6 412066 武雄市          49062    23178      25884      16932
 7 412074 鹿島市          29684    13920      15764      10124
 8 412082 小城市          44259    20823      23436      14769
 9 412091 嬉野市          27336    12667      14669       9214
10 412104 神埼市          31842    15172      16670      10913
11 413275 吉野ヶ里町      16411     8136       8275       5891
12 413411 基山町          17501     8266       9235       6321
13 413453 上峰町           9283     4379       4904       3260
14 413461 みやき町        25278    11969      13309       8638
15 413879 玄海町           5902     3035       2867       1918
16 414018 有田町          20148     9356      10792       6900
17 414239 大町町           6777     3077       3700       2560
18 414247 江北町           9583     4497       5086       3225
19 414255 白石町          23941    11133      12808       7253
20 414417 太良町           8779     4125       4654       2838

Excelファイルの読み込み(実践編)

ここでは実践編として、佐賀県統計年鑑において公開されているExcelファイルを読み込んでみましょう。 例として、「第4章 人口及び世帯」のファイルを使いますので、これをダウンロードして、ワーキングディレクトリのdataフォルダに移動してください。

このExcelファイルから、佐賀県内20市町の人口、世帯数、人口密度等からなるデータフレームを作成するには、以下のコードを実行します。

saga_pop <- read_excel(
    path = "data/3_117718_up_alzqkodl.xlsx", # ファイル名
    sheet = "4-6",                           # シート名
    range = "A15:Q40",                       # 読み込む範囲
    col_names = c("no", "name", "population", "pop_male", "pop_female", 
                  "gender_ratio", "households", "area", "density"),
    col_types = c("numeric", "text", rep("skip", 8), rep("numeric", 7))
) |> tidyr::drop_na()
saga_pop 
# A tibble: 20 × 9
      no name       population pop_male pop_female gender_ratio households  area
   <dbl> <chr>           <dbl>    <dbl>      <dbl>        <dbl>      <dbl> <dbl>
 1     1 佐賀市         233301   110191     123110         89.5      96874 432. 
 2     2 唐津市         117373    55015      62358         88.2      44192 488. 
 3     3 鳥栖市          74196    35528      38668         91.9      29816  71.7
 4     4 多久市          18295     8555       9740         87.8       6773  97.0
 5     5 伊万里市        52629    25445      27184         93.6      19984 255. 
 6     6 武雄市          47914    22727      25187         90.2      17624 195. 
 7     7 鹿島市          27892    13140      14752         89.1      10046 112. 
 8     8 小城市          43952    20772      23180         89.6      15907  95.8
 9     9 嬉野市          25848    11995      13853         86.6       9157 126. 
10    10 神埼市          31022    14884      16138         92.2      11452 125. 
11    11 吉野ヶ里町      16323     7990       8333         95.9       6137  44.0
12    12 基山町          17250     8174       9076         90.1       6756  22.2
13    13 上峰町           9286     4455       4831         92.2       3598  12.8
14    14 みやき町        25511    12170      13341         91.2       9229  51.9
15    15 玄海町           5609     3067       2542        121.        2231  35.9
16    16 有田町          19010     8780      10230         85.8       6981  65.8
17    17 大町町           6293     2903       3390         85.6       2455  11.5
18    18 江北町           9566     4460       5106         87.3       3433  24.5
19    19 白石町          22051    10358      11693         88.6       7247  99.6
20    20 太良町           8121     3842       4279         89.8       2788  74.3
# ℹ 1 more variable: density <dbl>

以下、read_excel関数に与えた引数について説明します。

  • pathは読み込むファイルのパスを指定します。
  • sheetは読み込むシート名(もしくはシート番号)を指定します。
  • rangeは読み込むデータの範囲を指定します(多くの記法がありますが、“B15:Q40”のように書くのが最もわかりやすいと思います)。
  • col_namesは列名を指定します。c関数はベクトルを作成する関数で、ここでは8つの文字列からなるベクトルを作成しています。
  • col_typesはデータ型を指定しています。“text”は文字型を、“numeric”は数値型を意味します。“skip”を指定した列を読み込みをスキップします(つまり読み込まない)。rep関数は繰り返した結果をベクトルで出力する関数で、rep("numeric", 7)は、“numeric”を7回繰り返した結果(すなわち、c("numeric", "numeric", "numeric", "numeric", "numeric", "numeric", "numeric")と同じ結果)になります。

最後に、tidyr::drop_na関数は、データフレームの中でNAを含む行を全て削除する(落とす)関数です。 大元のExcel表には、市町だけでなく郡のデータが存在しています。 しかし第1列の”no”列には、市町のデータ行のみ通し番号が振られていて、郡の行にはありません(そのためread_excel関数で読み込むと、そのセルのデータがNAになります)。 このことを利用して、郡データの行を落とすことで、20市町だけのデータフレームにしています。

外部ファイルへの出力

CSVファイル

データフレームをCSVファイルとして書き出すには、Rに用意されているwrite.csvという関数を利用することもできます。 しかしここでは、より柔軟性の高いreadrパッケージのwrite_csv関数を使う方法を紹介します。

この例では、datというデータフレームを、saga2.csvというファイルに書き出しています。

write_csv(dat, "saga2.csv")

Excelファイル

データフレームをExcelファイルとして書き出すには、writexlパッケージのwrite_xlsx関数が便利です。 この例では、datというデータフレームを、saga2.xlsxというファイルに書き出しています。

library(writexl)
write_xlsx(dat, "saga2.xlsx")