Upgrade to Pro — share decks privately, control downloads, hide ads and more …

因子型を使いこなそう@fukuoka.R#09

nonki1974
September 09, 2017

 因子型を使いこなそう@fukuoka.R#09

fukuoka.R #09 (2017/09/09) の発表資料

nonki1974

September 09, 2017
Tweet

More Decks by nonki1974

Other Decks in Technology

Transcript

  1. とりあえず文字型 > bloodtype <- c("B","A","A","A","AB", + "B","AB","A","A","A","C") > bloodtype [1]

    "B" "A" "A" "A" "AB" "B" "AB" [8] "A" "A" "A" "C" > table(bloodtype) bloodtype A AB B C 6 2 2 1
  2. 因子型に変換 | factor()関数 > bloodtype.f <- factor(bloodtype, + levels =

    c("A","B","O","AB")) > bloodtype.f [1] B A A A AB B AB [8] A A A <NA> Levels: A B O AB > table(bloodtype.f) bloodtype.f A B O AB 6 2 0 2 > table(addNA(bloodtype.f)) A B O AB <NA> 6 2 0 2 1 カテゴリ(水準)を ベクトルで指定 カテゴリに一致しない データは<NA>に <NA>もカテゴリ として扱う
  3. 因子型の中身 整数型ベクトル 水準ベクトル > str(bloodtype.f) Factor w/ 4 levels "A","B","O","AB":

    2 1 1 1 4 2 4 1 1 1 ... > # 整数型に変換 > as.numeric(bloodtype.f) [1] 2 1 1 1 4 2 4 1 1 1 NA > # 対応する水準ベクトルの文字に変換 > as.character(bloodtype.f) [1] "B" "A" "A" "A" "AB" "B" "AB" [8] "A" "A" "A" NA
  4. データフレーム > pokemon <- read.csv("pokemon.csv") > head(pokemon$type1) [1] くさ みず

    むし むし ノーマル [6] ノーマル 15 Levels: あく いわ エスパー かくとう ... むし 文字列を含んだ列は因子型として読み込まれる
  5. 文字型として読み込みたい | stringsAsFactors > pokemon2 <- read.csv("pokemon.csv", + stringsAsFactors =

    FALSE) > head(pokemon2$type1) [1] "くさ" "みず" "むし" "むし" [5] "ノーマル" "ノーマル" 文字列処理をしたい場合とか。
  6. 集計と棒グラフ > table(pokemon$sex) オス なし メス 45 4 23 >

    barplot(table(pokemon$sex)) オス なし メス 0 10 20 30 40
  7. 水準の順序を変更 > pokemon$sex <- factor(pokemon$sex, + levels = c("オス", "メス",

    "なし")) > head(pokemon$sex) [1] オス オス オス メス オス オス Levels: オス メス なし > barplot(table(pokemon$sex)) オス メス なし 0 10 20 30 40
  8. 水準ごとの統計量で水準を並べ替え > pokemon$type1 <- reorder(pokemon$type1, + pokemon$weight, + function(x){-median(x)}) >

    boxplot(weight~type1, data=pokemon) Type1ごとの weightの中央値の 降順に水準を並び替え
  9. forcats package > # パッケージのインストール > install.packages("forcats") > # パッケージのロード

    > library(forcats) > pokemon <- read.csv("pokemon.csv") > boxplot(weight~fct_reorder(type1,weight,median,.desc=T), + data=pokemon)