LoginSignup
2
2

More than 5 years have passed since last update.

R言語(自分メモ)

Last updated at Posted at 2015-09-14

カラーパレット

colomap 使う

  • Ubuntu 14.04

ディストリビューション毎に事前にパッケージに必要なライブラリを入れる。

# apt-get install libcurl4-openssl-dev libv8-3.14-dev
# R
# install.packages('colormap')
# library('colormap')
# カラーパレットの表示:colormapコマンド
par(mfrow = c(44,1))
par(mar = rep(0.01, 4))
for(i in seq(colormaps)) { 
  barplot(rep(1, 72), yaxt = "n", space = c(0, 0), border = NA,
          col = colormap(colormap = colormaps[[i]]), main = sprintf("\n%s", names(colormaps[i])))
}

plot(hoge$aaa, col = colormap(colormap = colormaps$blackbody))

参考:https://www.karada-good.net/analyticsr/r-483

レーダチャート(蜘蛛の巣的な)

いくつか方法あるぽいが、plotrixというパッケージを使うと簡単そうだったのでそれを使った。


install.packages("plotrix")
library(plotrix)

radial.plot(DF,
            main = "タイトル",
            labels = list,           # ラベル名のリスト
            line.col="red",          # ラインの色 
            lwd = 2 ,                # ラインの太さ
            rp.type = "p",           # グラフタイプ
            radial.lim = c(0,4),     # 円の外側への距離
            start=pi/2,              # グラフ描画の開始位置、ラジアンで指定
            clockwise = TRUE,        # 時計回りにプロット
            label.prop = 1.1,        # ラベル文字と円との距離
            grid.col ="gray",        # グリッド色
            grid.bg = "transparent", # 背景透明
            show.grid.labels=-1,     # 値の位置(-1で北方向)
            boxed.radial = FALSE)    # デフォで数字はボックス白枠の中にある

# 描画時に描画形式とラベルフォントの調整
par(mfrow=c(2,3),cex.axis=0.5)
radial.plot()

pie チャート(さくっと版)

カテゴリ集計を円でサクッと

pie(sort(table(tmp_dep), decreasing = T),
    radius=1,
    clockwise=T,
    border="#ffffff",
    main="ここにタイトルをおく",
    cex.main=2)

特定の列の特定の文字を含むサブセットDFを抜く

list はベクトル

new_df <- subset(org_df, col1 %in% list)

X軸ラベルのフォントのサイズ

  • boxplot : cex.axis
  • barplot : cex.names

ある条件下における値変更(ifelse)

DF$Aが"hoge"なら100、そうじゃないならNA

DF$A <- ifelse(DF$A == "hoge",100,NA)

ある列を基準にデータフレームを並べ替える(order)

昇順(order)

DF[order(DF$col1),]

降順(order , decreasing = T)

DF[order(DF$col1 , decreasing = T),]

複数の列を基準とする場合、カンマで並べる

DF[order(DF$col1 , DF$col1 , decreasing = T),]

列に対して、ある条件に合った文字を変更する

# DF$V1で "3" を "あいうえお" に変換する
DF$V1[DF$V1 == 3] <- "あいうえお"

ベクトルを追加する

> a <- sum(product_new$prof) / sum(product_all$prof) * 100
> a
[1] 40.80371
> a <- append(a,sum(product_renewal$prof)  / sum(project_all$prof) * 100)
> a
[1] 40.80371 27.84163

文字検索して抜き出す(grepl)

大文字小文字の区別をしない場合は ignore.case = TRUE をつける

# subset にて
subset(DF, grepl("Zabbix",DF$Product,ignore.case = TRUE))

# aggregate にて
aggregate(grepl("HTTPD|Tomcat|JBoss",DF$Product),by=list(DF$month_bring),sum)

不要な因子を消す

subset 等で派生したデータフレームに不要(NAだったり要素が0だったり)な因子が残る件について、factorを使ってそれを消す

DF$col1 <- factor(DF$col1)

table 出力結果(クロス集計結果)をデータフレームにする

DF1new <- as.data.frame.matrix(table(DF1$month,DF1$Product.Category))
DF1new$month <- rownames(DF1new)
rownames(DF1new) <- NULL

文字列の一部を抜き出す

例えば、「2016-01-01」となっている日付列(DF$date)から月(DF$month)の行を作る

DF$month<-substr(DF$date,1,7)

1つめから7つ目までを抜いて入れる、つまり「2016-01」まで

文字を挿入する

> ORG
[1] "ABC"

> paste("ABC",ORG,sep=",")
[1] "ABC,123"

> paste(ORG,"EFG",sep=",")
[1] "123,EFG"

マージ(merge)

DF1とDF2を同じ列 month をキーにマージ

  • 全部残す=>all=T(無いセルは NA)
  • 両方にあるものだけマージして残す=>all=F(デフォルト)
  • 右側を残こす=>all.y=T(左のデータフレームでない行は消え、右のデータフレームだけにある行が残り、その値のない列は NA)
  • 左側を残こす=>all.y=T(右のデータフレームでない行は消え、左のデータフレームだけにある行が残り、その値のない列は NA)
> DF1
    month member age
1 2016-01  jacky  10
2 2016-05  sarah  20
3 2016-03    bob  10
4 2016-02   rucy  50
> DF2
    month value category
1 2016-01     5        a
2 2016-05     6        b
3 2016-04    10        c


> merge(DF1,DF2,by.x="month")
    month member age value category
1 2016-01  jacky  10     5        a
2 2016-05  sarah  20     6        b

> merge(DF1,DF2,by.x="month",all.x=T)
    month member age value category
1 2016-01  jacky  10     5        a
2 2016-02   rucy  50    NA     <NA>
3 2016-03    bob  10    NA     <NA>
4 2016-05  sarah  20     6        b

> merge(DF1,DF2,by.x="month",all.y=T)
    month member age value category
1 2016-01  jacky  10     5        a
2 2016-05  sarah  20     6        b
3 2016-04   <NA>  NA    10        c

> merge(DF1,DF2,by.x="month",all=T)
    month member age value category
1 2016-01  jacky  10     5        a
2 2016-02   rucy  50    NA     <NA>
3 2016-03    bob  10    NA     <NA>
4 2016-05  sarah  20     6        b
5 2016-04   <NA>  NA    10        c

tapply で二次元

list を使う

tapply(A$value,list(A$col1,A$col2),sum)

関数

testfunc <- function(x){
 # 処理部
 out <- tapply(x$col1,x$col2,sum)
 # 返す
 return(out)
}

# 呼び出し
tmp <- testfunc( x = abc )

Rのアップデート

install.packages("installr")
library(installr)
updateR()

Rのプロキシ設定

Sys.setenv(http_proxy="http://<proxy server>:<port>",
           http_proxy_usr="<id>:<pass>")

table からデータフレーム作る

DF <- as.data.frame.matrix(table(DF$month,DF$Product))

sjisでcsvファイルを読み込みデータフレーム作る

DF <- read.csv("data.csv",header = T , fileEncoding = "sjis")

日付にする

DF$ログイン日<-strptime(DF$ログイン日,"%Y/%m/%d")

列を消す

DF <- DF[,setdiff(colnames(DF),c("列1","列2","列3"))]

オブジェクト全部消す

rm(list=ls(all=TRUE)) 

カイ二乗検定

> tapply(DF$ratio,DF$weekday,mean)
   Fri    Mon    Thu    Tue    Wed 
91.025 49.900 81.800 73.850 86.900 

> chisq.test(tapply(DF$ratio,DF$weekday,mean))

    Chi-squared test for given probabilities

data:  tapply(DF$ratio, DF$weekday, mean)
X-squared = 13.842, df = 4, p-value = 0.007817

データフレムをキャラクタに変換

DF <- as.character.Date(DF)

割合で集計(prop.table)

prop.table(table(DF$parameter))

値を丸める(round)

> round(prop.table(table(DF$Understand)),digits = 2)

空のセルをNAにする

df[df==""]<-NA

NAを0にする(is.na)

DF[is.na(DF)] <- 0

カレントディレクトリをセットする

setwd("/home/demo/test")

CSSをセットする

options(rstudio.markdownToHTML =
  function(inputFile, outputFile) {
    require(markdown)
    markdownToHTML(inputFile, outputFile, stylesheet='custom.css')
  }
)

指数表現にするか否かの閾値を設定する(デフォルトは 0)

options(scipen=1)

特定の列を抜き出してデータフレーム作成

# Type列に"cifs"というのがあるRead列とWrite列を抜き出す
> new_df <- subset(org_df, Type == "cifs", select=c(Read,Write))


# 2015年度の分の売上データを抜き出す DF$date は日付型(POSIXlt)
subset(DF, as.Date(DF$date) > as.Date("2015-03-31") &
           as.Date(DF$date) < as.Date("2016-04-01")
      )

出力の横幅調整

> options(width = 100)

クロス集計(tapply)

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

## Specie毎のSepal.Lengthの合計
> tapply(iris$Sepal.Length,iris$Species,sum)
    setosa versicolor  virginica
     250.3      296.8      329.4

## Specie毎のSepal.Lengthの平均
> tapply(iris$Sepal.Length,iris$Species,mean)
    setosa versicolor  virginica
     5.006      5.936      6.588

単回帰分析(lm)

> result<-lm(Sepal.Length~Sepal.Width,iris)
> summary(result)

Call:
lm(formula = Sepal.Length ~ Sepal.Width, data = iris)

Residuals:
    Min      1Q  Median      3Q     Max
-1.5561 -0.6333 -0.1120  0.5579  2.2226

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)   6.5262     0.4789   13.63   <2e-16 ***
Sepal.Width  -0.2234     0.1551   -1.44    0.152
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8251 on 148 degrees of freedom
Multiple R-squared:  0.01382,   Adjusted R-squared:  0.007159
F-statistic: 2.074 on 1 and 148 DF,  p-value: 0.1519

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2