見出し画像

#9-P R言語備忘録 Ver. ∞

基本はネット上の情報をまとめてます。たまにめちゃめちゃ初歩みたいなことも書いてますが、基本はすぐに見つからなかった情報を中心に。頻繁に更新します。

  • Rのコンソール画面のクリア
    Ctrl +L キー

  • 特定変数「x」以外の変数の全削除
    > rm(list=setdiff(ls(), "x"))
    dplyrパッケージが必要だが、楽。settdiff(A,B) は差集合を示し、AにあってBにない要素を取り出すもの。(B,A)とすればBにあってAにない要素の集合を取り出せる。なので、特定変数「x」「y」以外としたければ
    > rm(list=setdiff(ls(), c("x","y")))
    とすればよく、いくつでも特定変数は指定できる。

  • 特定の文字が含まれる変数の一括削除
    例えばtmp1, tmp2など、tmp*というような一時的な変数を作ってなんかの計算をして、それらを削除したいとき rm(tmp1, tmp2…)と並べるのは面倒やし見た目がわるい。そんなときは
    >rm(list = ls(pattern = "tmp"))
    これで tmp がつく全ての変数が消える。

  • Rからクリップボードへコピー
    Rから外部のファイル(ほとんどエクセル)にデータ (data) をコピーしたいなら
    >write.table(data, file = "clipboard", sep="\t")
    でOK。あとはエクセルなどに普通に貼り付けできる。また、dataが大きすぎる場合はこれだとエラーになるようで、回避するには
    >write.table(data, file = "clipboard-16384", sep="\t")
    と、clipboardの後のハイフン以降でクリップボードの最大容量を指定するといけるらしい。ちなみに上記の16MBくらいがマックス(PCのメモリにもよるかも)。

  • クリップボードからRへのコピー
    これも簡単で、コピペしたい元データ(エクセルやCSVなど)をコピーした状態で
    >read.table("clipboard")
    で貼り付く。

  • エクセルファイルを読み込む
    エクセルを読み込む関数・パッケージはいくつかありますが、最速はreadxl::read_xlsx() みたい。
    参考1 https://stackoverflow.com/questions/44538199/fast-way-to-read-xlsx-files-into-r
    参考2 http://www.sthda.com/english/wiki/reading-data-from-excel-files-xls-xlsx-into-r

  • 複数の文字列の連結
    文字列 a("ab" "cd") とb("ef" "gh")があって、これを連結したいとする。ほしいのは文字列c("ab" "cd" "ef" "gh")である。
    「文字の連結」とかで調べるとpaste使えとかでてくるけど、pasteは要素ごとにやるので、paste(a,b) だと "ab ef" "cd gh" となる。
    短すぎて悲しいけど、
    > c(a,b)
    で解決。初歩すぎるところで時間食ってしまった。。

  • ベクトルからNAの要素を取り除く
    > tmp <- tmp[!is.na(tmp)]
    NA削除したベクトルができる。

  • ggplot2でX軸をY軸のゼロでクロスさせる
    > scale_y_continuous(expand = c(0,0), limits = c(0,var_Y))
    これ伝わるかな?ggplot2でX軸をカテゴリーにしてtheme_classic()とかで描画すると、X軸とY軸の交点がゼロでなくて、ちょっと下側でクロスする。この文だけでY軸の最小最大値も決めれて便利。var_YがY軸の最大値で最小値はこの場合は0になってる。

  • 空のデータフレームの作成
    df <- data.frame()
    でできる。まず空のdfを作って、そこに処理したデータをスタックしていく方法って私のような素人レベルではよく使う。列(カラム)数は固定の場合は例えば以下のようにする。(例では3列のカラムを作って、それぞれにcolumn1~column3という名前をつけている
    n <- 3
    df <- data.frame(matrix(rep(NA, n), nrow=1))[numeric(0), ]
    colnames(df) <- c("column1", "column2", "column3")

  • TRUEが入っている最大の要素を取得
    ほとんどがゼロあるいはNA(データなし)の大きな行列において実際の必要なデータはどこまで入っているのかを知りたいとき。
    > tmp <- rowMeans(matrix)>0;
    で、matrixに入っている中でゼロ値でないものを示すベクトルtmpを作成し、
    > maxrow <- max(which(tstmp==TRUE))
    which()関数とmax()の組み合わせで最大値を同定。

  • 相関行列の算出、さらにp値や信頼区間も算出
    > library(psych)
    > corr.test(data)
    と、psychパッケージの関数corr.testを使うことで特に心理学領域ではデフォルト的な相関行列とそのp値が計算される。これが惜しいのはデフォルトでは小数点第2位までしか出してくれない点。もちろんオプションで変更可能。
    > print(corr.test(data),short = FALSE,digits = 3)
    のように、digitに小数点以下何桁まで表示するか、shortは結果表示を簡略化するかを指定している。short = FALSEで、95%CIまで表示される。
    頭にprintを使ってるのは、結果をどう表示するかを指定してるってことだろうね。オプションで順位相関も出せる。その場合は
    > corr.test(data, method = "pearson")
    で。

  • 相関の図を描く
    > library(psych)
    > pairs.panels(data)
    もうこれ一択。プロットと係数とわかりやすく図示してくれる。
    > pairs.panels(data, method = "spearman")
    でスピアマンの順位相関も算出可。kendallとすればケンドールも。
    > pairs.panels(data, scale = TRUE, cex.cor=1.5, cex.labels = 3)
    scaleをTRUEにすれば表示される相関係数の値の文字サイズをその大きさに併せてスケーリングしてくれる。cex.corはその文字サイズの基準の大きさ。cex.labelsはななめに表示される各変数名の文字サイズ。

  • 2つの文字列ベクターのすべての組み合わせを求める
    例えば、文字列 ["a","b","c"] と ["d","e","f"] があったとして、これらを組み合わせた [ad, ae, af, bd, be, bf, cd, ce, cf] が欲しいとする。baseの関数で行けちゃう。
    > expand.grid(c("a","b","c"),c("d","e","f"))
    これで行列で返ってくるので、上記をhogeにでも格納して
    > paste(hoge[,1],hoge[,2],sep = "")
    で欲しい文字列ベクトルが手に入る!

  • 複数の特定列の情報で規定された行を取り出す
    > newDF <- oldDF[oldDF$A == 3 & oldDF$B == 4]
    まじか…って感じの簡単なことだったのでメモ。[]の中でも&とかは使えるのね。

  • 列名で列を削除
    > dat <- dat[, colnames(dat) != "X"]
    削除したいのが複数の場合は
    > dat <- dat[, -which (colnames(dat) %in% c("X", "Y", "Z"))]
    でOK。A %in% B はベクトル A の要素一つ一つが B に存在するかを調べ、A と同じ要素数の真偽型ベクトルが返る。
    ちなみに A %in% B の否定(NOT)は、
    > !(A %in% B)
    でOK。単純。

  • 基礎統計量を算出
    >
     library(psych)
    > describe(hoge)
    基礎統計量はこれ一択!

  • 空の文字列の削除
    文字列aの中で ”” という、なにもない文字列を削除する方法
    > a[a != ""]
    これだけ。stri_remove_empty というstringiパッケージの関数を使えみたいな記載もありましたが、これでOK。

  • &と&&の違い
    どちらも論理積なんだけど、&&は1つ目の要素のみ評価する。
    通常の解析では各要素について論理積をとってほしいことが多い気がするので、&のみでよさそう。

  • リストの中に含まれる値からdataframeのインデックスを取得
    あるリストがあって、そこに含まれる値と同一の値を持つ行を取得したい場合。List <- c("a","b","c","d","e") というリストがあり、データフレーム「df」のある列「hoge」がa~eの行のインデックスを取得したい。
    > idx <- match(List, df$hoge)
    これだけ。このインデックスを使って、例えば削除とか抽出とかできる。
    > newdf <- df[-idx, ](削除)
    > newdf <- df[idx, ](抽出)

  • プロットのパネルを分割
    3*2とかのパネルで表示したいとき。
    par(mfrow=c(3,2)) 
    をplotするコードの前に書いておけばOK。


この記事が気に入ったらサポートをしてみませんか?