No.22360 R レイアウトが異なるテキストファイルの読み込み  【明石】 2017/05/26(Fri) 14:33

青木先生,
いつもお世話になり,ありがとうございます,明石と申します。

Rについて,お聞きしたいことがでてきました。
ご教示をいただければ,大変に助かります。
どうぞよろしくお願いいたします。

ーーー

添付の画像ファイルをご覧ください。

読み込むテキストファイルは,
1行目
2行目〜
と列の長さが異なることから,ファイルの読み込みで苦慮しています。

データの区切りは,半角空白文字です。

1行目の2つの数字(300000 200)は,2行目以降の表のサイズを表しています。
題材によりサイズは異なります。

2行目以降に,ラベル(文字型),数値(200列)の組が,300000行 並んでいます。

出力したいものは,
1行目に記載されている表のサイズ(300000 200)をもつ,2行目以降のデータのmatrixです。
・ラベル(文字型)を,rownamesに格納
・colnames は,paste0("V",1:200)
・数値を数値型で,200列

2行目以降の表のサイズが大きいので,効率的な処理もできればと思います。

ご教示をいただければ大変に助かります。
どうぞ,よろしくお願いいたします。


No.22361 Re: R レイアウトが異なるテキストファイルの読み込み  【青木繁伸】 2017/05/26(Fri) 18:27

1 行目を読み飛ばせば,あとは,1行目に書いてあるサイズ情報を利用せずとも,read.table がちゃんと読んでくれます。
read.table(ファイル名, skip=1)
colnames もデフォルトで付けてくれます。

No.22362 Re: R レイアウトが異なるテキストファイルの読み込み  【明石】 2017/05/26(Fri) 18:36

青木先生,
いつもお世話になり,ありがとうございます,明石と申します。

ご教示をいただきまして,大変に助かりました。
ありがとうございました。

No.22366 Re: R レイアウトが異なるテキストファイルの読み込み  【明石】 2017/05/27(Sat) 15:23

青木先生,
いつもお世話になり,ありがとうございます,明石と申します。

昨日はご教示をいただき,大変に助かりました。
ありがとうございました。

ーーー

昨日の画像ファイルのデータ例について,追加のご質問がございます。 
どうぞよろしくお願いいたします。

1行目の 300000 200 は,2行目以降の表データのサイズ(行 列)を示しています。

「文字」+「数値(200列)」の組が,300000行の繰り返しがあることを示しています。

(表のサイズは,題材により異なります。 固定ではありません)

2行目以降の表データのサイズ(行 列)を,1行目で明示している理由は,
ケースによっては,数値(200列)の後半に欠損がある場合を想定してからです。

件名の「レイアウトが異なるテキストファイルの読み込み」の真意は,ここにあります。

先生にご教示いただきたいことは,以下です。
お手数をおかけいたします。

・2行目以降に読み込む表データを,matrix型で格納する

・読み込んだ「文字」は,rownamesに格納する

・読み込んだ「数値(200列)」は,1列〜200列に数値データとして格納する。
 
・ケースによっては,数値(200列)の後半に欠損がある場合への対応として,
 データに欠損がある行については,列数が合うように(この場合は 200)
 その箇所をNA で補う。

お手数をおかけいたします。

ご教示いただければ,大変に助かります。

どうぞ,よろしくお願いいたします。

No.22367 Re: R レイアウトが異なるテキストファイルの読み込み  【青木繁伸】 2017/05/27(Sat) 16:05

何度かお願いしておりましたが,添付図ではなく,仕様の全てを含む簡単なテストデータと,期待する結果をそえて質問してください。

説明文は曖昧さを含みますし,読み取りが不十分なこともありますから。
その点,データと結果があれば,仕様を満たすプログラムは一意に定まりますから。

「ケースによっては,数値(200列)の後半に欠損がある」というのは,一行ごとに数値の個数が違うことがあるということですか?
以下のようなものでよいですか?
file: "test.dat"
=====次行から=====
4 6
a 1 2 3 4 5
b 11 12 13
c 21 22 23 24 25 26
d 31 32 33 34
=====前行まで=====

func = function(fileName) {
s = readLines(fileName, 1)
s = as.numeric(unlist(strsplit(s, " ")))
ncol = s[2]
d = read.table(fileName, skip=1, row.names=1, header=FALSE, col.names=c("name", paste0("V", 1:ncol)), fill= TRUE)
as.matrix(d)
}
func("test.dat")

結果
> a = func("test.dat")
> a
V1 V2 V3 V4 V5 V6
a 1 2 3 4 5 NA
b 11 12 13 NA NA NA
c 21 22 23 24 25 26
d 31 32 33 34 NA NA
> class(a)
[1] "matrix"

No.22368 【御礼】 Re: R レイアウトが異なるテキストファイルの読み込み  【明石】 2017/05/27(Sat) 17:00

青木先生,
いつもお世話になり,ありがとうございます,明石と申します。

今回もご丁寧にご教示いただき,誠にありがとうございます。
御礼を申し上げます。

先生からご指摘を受けましたように,
今後,質問をさせていただく際には,お書きになられたことに沿うようにいたします。

不愉快な思いをさせてしまい,大変に申し訳ございませんでした。
深くお詫びをいたします。

ーーー

今回の質問の内容については,先生がお書きになられた通りです。
私が期待していました通りです。

青木先生からのご教示は,大変に良いお手本となります。
さっそく,勉強をさせていただきます。

今回もありがたいご教示に感謝いたします。
ありがとうございました。

● 「統計学関連なんでもあり」の過去ログ--- 048 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る