データ入出力編
は Windows 版固有、
は UNIX 版固有、
は Linux 版固有、
は S-PLUS 2000 版固有の問題です。
質問 一覧
- テキストファイルからデータを読み込むためにはどうすれば良いか。
- Excel の Book 形式ファイルから2枚目以降のシートを読み込みたい。
- Excel ファイルをインポートした。インポート自体はうまくいったようだが、そのデータを使った処理がまったくできない。
- read.table でデータを読み込んだが、1列目のデータが読み込まれていない。
テキストファイルからデータを読み込むためにはどうすれば良いか。
テキストファイルからデータを読み込むための、最もシンプルで汎用的な方法は関数scanを用いる方法です。関数scanはデータファイルの最初から順番にデータを読み込み、Sオブジェクトとして格納させることができます。
- whatオプションを利用すると、読み込むデータタイプの指定ができます。デフォルトでは数値データとして読み込みます。
- sepオプションを利用すると、データの区切り(セパレータ)の指定ができます。デフォルトではスペース、タブ、改行などの「空白文字」を区切りとみなします。
- skipオプションを利用すると、(「作成者」「作成日」などの)データヘッダ部分を読み飛ばすことができます。デフォルトでは最初からデータとして読み込みます。
- nオプションを利用すると、読み込むデータ数を指定できます。デフォルトではファイルの最後まで読み込みます。
詳細な解説はマニュアルのscanの項を参照してください。また、関数read.tableなどもデータの取り込みに利用できます。
- Example :
-
> mydata <- scan("data.txt")
# テキストファイル"data.txt"から数値データを読み込み、mydataという名前のSオブジェクトを作成する
> mydata2 <- scan("data2.txt",what="")
# テキストファイル"data2.txt"から文字データを読み込み、mydata2という名前のSオブジェクトを作成する
> mydata3 <- scan("data3.csv",sep=",")
# CSVタイプのファイル"data3.csv"から数値データを読み込む
Excel の Book 形式ファイルから2枚目以降のシートを読み込みたい。
- 「ファイル」メニューから「インポート」を選び、さらに「Microsoft Excel」を選択します。
- 「Import Data」のダイアログが出現します。ここの「Options」タグを選び、この中の「Page Number」で目的のシート番号を入力します。
Excel ファイルをインポートした。インポート自体はうまくいったようだが、そのデータを使った処理がまったくできない。
Excel ファイルにアンダーバー( _ )を含む名前(例えば Jan_98.xls のような)がついていませんか。
S-PLUS ではアンダーバー( _ )は「付値」(名前をつけて値を保存すること)を行う特殊な演算子を表します。そのため、このようなファイルをそのままインポートすると、エラーの原因となりますので、
- Excel で保存するときに、アンダーバーを含まないファイル名にしておく。
- S-PLUS にインポートする際、ダイアログ「Import Data / Data Specs」の下の方にある、「Import To Data Frame」欄にアンダーバーを含まない名前を入力する。
ようにしてください。
read.table でデータを読み込んだが、1列目のデータが読み込まれていない。
関数 read.table を使うと、スプレッドシートデータやデータベースのデータを読み込むのにとても便利です。read.table でテキストデータを読み込むと、データ・フレームとして読み込まれますから、その後の統計処理などに有利です。
read.table を使って読み込んだデータの1列目のデータが欠落しているように見えることがあります。これは、元のデータの1列目が文字列だった場合(a1, b2 など)、この文字列をデータの行名(row name)とするためです。
この動作を避けるには、read.table の引数 row.names に NULL を与えて読み込みます。
> mydata <- read.table("data.txt", sep=",", row.names=NULL)
すでに行名として読み込まれているデータは以下のようにしてデータに戻すことができます。
> mydata$var <- dimnames(mydata)[[1]]
# 行名を mydata の変数 var にする