何某の戯言

何某の戯言

PR

×

プロフィール

佐藤のかし

佐藤のかし

カレンダー

バックナンバー

2026.10
2026.09
2026.08
2026.07
2026.06
2020.10.21
XML
カテゴリ: プログラミング
​実験の合間にTCGAのデータを使ってみようと画策している。

巷ではプログラミングならpythonだと言われているが、
基本的には​ ​pythonは苦手分野がない ​​ってだけで ​ ​統計データ処理についてはRがおすすめ​​ だ。
もちろん他のでもよいが、なんてったって ​It's FREE!​

さて、
取り出したデータを云々して(後日書くかな?)このような形(データdat)になった。
     1   2   3   4
ENSG~  "0.2" "0.3" ・・・
ENSG~
(実際には行数6万、列数400ぐらいある)

​ ​行列内が「文字列(chr)」のいわゆる文字行列であり、計算に使えない!​​

データ型変更のために、
> x <- as.numeric(dat)
とすると、 何故かxはリスト(1行)になってしまう・・・
たぶん関数の特性なんだろうが(-_-;)

わからないことは ggrks
ということで英語の下手な和訳みたいなサイトから引っ張ってきたのが下記
> dat <- mapply(dat, FUN=as.numeric)
> dat <- matrix(data=dat, ncol=行数, nrow=列数)
ncolとnrowのために事前にdim()を使って行列構造をとってから使う様子。
ただ、 非力なノーパソでは1行目のmapplyでメモリが不足( ^ω^)・・・

​​ 次っ!​​​( ゚д゚ )クワッ!!​
リスト化されるんだったら1行ずつ当てはめればいいんじゃない? という考え。
ただし 行列matrixのままだと当てはめる毎に文字と認識されてしまった (matrix内部は単一の型しか認めない)ので、まずデータフレームにしてからfor構文で回す。
> dim(dat) # 構造取得(列数は下で使う)
> dat <- as.data.frame(dat)
> for (i in 1:列数){dat[, i] <- as.numeric(dat[, i])}
​ 本当はマナー違反 だけどfor構文内がそんなに長くないので横書き。列数書かなければいけないので注意。
たぶんnrow(dat)とか使えば一般化しそうだけどdim()が時間かからんし1回やればいいだけなので考えない!

というわけで無事datは以下の通り数字行列(正確にはこの時点ではデータフレームだが)になったのであった。わーい!
     1  2  3  4
ENSG~  0.2 0.3  ・・・
ENSG~

(追記1)要素自体はnumericになってるけど、summary(dat)で見ると列はchracterになってて使えない・・・orz

(追記2)もともとあるところに代入するからベクトルの型が変わらないんじゃね?ということで、新たに変数DFを作ってそこにぶっこむという方法を思いつく。
> for (i in 1:行数){DF <- cbind(DF, as.numeric(dat[i,]))}
​明らかにもっとスマートにできそうだけどなあ。
それも転置した(iを列数にしてrbind使えばいいか)し、
names属性(行名・列名)またつけないといけないし 。

(2020/10/22追記)あほなことに気づいた。sapply使えばええやん。
> data <- sapply(dat, as.numeric)
> rownames(data) <- rownames(dat)
これで解決!





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2020.10.22 15:27:24
コメント(0) | コメントを書く
[プログラミング] カテゴリの最新記事


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: