今回はデータハンドリングで役に立つ小技を5つだけ紹介する。(個人的に忘れやすいが、意外と役に立つものをpick upする)
NO.1 「『不正なマルチバイト文字があります』のエラーを出ないようにする(おそらくmac OS Xのみ)」
このエラーについてはexcelの保存方法を変更するだけで解決するが、そのようなことを気にしなくても魔法のコマンド「fileEncoding="cp932"」で解決出来る。(csvを読み込むこととする。)
データ名 <- read.csv("データ名.csv", header=T, sep=",", fileEncoding="cp932")
NO.2 「ある値を任意のクラスに分けて、そのクラスに含まれるデータの数、percentage、累積のpercentageを返す関数」
小技ではないが、クラスを分割し、クラス内の人数や割合を求めるのに有効な関数
freqtab <- function( x, # データのベクタ cn=1+log2(length(x)), # 階級数 cn はスタージェスの公式 wid=FALSE) # 階級幅を指定する { x <- x[!is.na(x)] # 欠損値を除く min <- min(x) # データの最小値 max <- max(x) # データの最大値 ran<-max-min # データが含まれる範囲 if(!wid){ wid <- round(abs(ran/cn), 3) } # 階級幅を自動計算 cla <- floor(x/wid) # 階級に分ける mnc <- min(cla) # 階級の最小値 mxc <- max(cla) # 階級の最大値 cla <- factor(cla, levels=mnc:mxc) # 度数0でも数える freq <- table(cla) # 度数を数える names(freq) <- paste(mnc:mxc*wid, "-", mnc:mxc*wid+wid) # 階級名を付け直す percent <- freq/sum(freq)*100 # 相対度数 cum.pcnt <- cumsum(percent) # 累積相対度数 return(cbind(freq, percent, cum.pcnt)) # 度数分布表 }
上のコマンドでfreqtab関数を作成した後、以下のコマンドを実行する。
freqtab(データ名$列名, wid=階級の幅)
NO.3 「ある値で層別化した場合の要約統計量を求める」
例えば、性別ごとに要約統計量を求める
by (データ名, データ名$層別化したい列, summary)
NO.4 「指定の値を持つ行(サンプル)の除外」
which関数とマイナスを利用する簡単な方法。orやand(|もしくは&)で繋げば、複数項目に適応できる。除去した後のデータセット名には注意。
新データ名 <- 元のデータ名[-which(元のデータ名$列名=="指定の値"), ]
NO.5 「列の中で大きい値を10個選ぶ」
例えば、外れ値を除外した後にmax近辺にある数値はどのようなものか確認する場合に用いる。
tail(sort(データ名$列名), 10)
非常に簡単であるこれらのコマンドも意外と出番は多いかも。(編集したり、組み合わせるとさらに強力になる!!)
ぜひお試しあれ
20160202
RF