Rのデータフレームにおいて、ファクター列を2値に変換する方法をお伝えいたします。
方法はとても単純で、データフレームの列ごとにファクター型かどうかをチェックし、ファクター型であればファクターごとに2値の列を新たに作成し追加します。
ソースコードは以下のようになります。


convertFactorToBinary <- function(df, sep = ".") {
  l <- list()
  for (i in 1:ncol(df)) {
    if ("factor" %in% class(df[[i]]) &&
        !("ordered" %in% class(df[[i]]))) {
      m <- sapply(levels(df[[i]]), function(x)
        as.integer(x == df[[i]]))
      for (j in 1:ncol(m)) {
        l[[paste(colnames(df)[i], colnames(m)[j], sep = sep)]] <- m[, j]
      }
    } else{
      l[[colnames(df)[i]]] <- df[[i]]
    }
  }
  return(data.frame(l))
}

データセットwarpbreaksを用いて実際に試してみます。
まずは、データセットの内容を確認します。


> data("warpbreaks")
> print(str(warpbreaks))
'data.frame':	54 obs. of  3 variables:
 $ breaks : num  26 30 54 25 70 52 51 26 67 18 ...
 $ wool   : Factor w/ 2 levels "A","B": 1 1 1 1 1 1 1 1 1 1 ...
 $ tension: Factor w/ 3 levels "L","M","H": 1 1 1 1 1 1 1 1 1 2 ...

> print(head(warpbreaks))
  breaks wool tension
1     26    A       L
2     30    A       L
3     54    A       L
4     25    A       L
5     70    A       L
6     52    A       L

次に、ファクター型の列を変換してみます。


> res <- convertFactorToBinary(warpbreaks, sep = "_") > print(str(res))
'data.frame':	54 obs. of  6 variables:
 $ breaks   : num  26 30 54 25 70 52 51 26 67 18 ...
 $ wool_A   : int  1 1 1 1 1 1 1 1 1 1 ...
 $ wool_B   : int  0 0 0 0 0 0 0 0 0 0 ...
 $ tension_L: int  1 1 1 1 1 1 1 1 1 0 ...
 $ tension_M: int  0 0 0 0 0 0 0 0 0 1 ...
 $ tension_H: int  0 0 0 0 0 0 0 0 0 0 ...

> print(head(res))
  breaks wool_A wool_B tension_L tension_M tension_H
1     26      1      0         1         0         0
2     30      1      0         1         0         0
3     54      1      0         1         0         0
4     25      1      0         1         0         0
5     70      1      0         1         0         0
6     52      1      0         1         0         0

ファクター列が2値になっていることが確認できました。

関連する記事

  • UbuntuにRをインストールするための手順UbuntuにRをインストールするための手順 UbuntuにRをインストールするための手順をお伝えする。 Ubuntuのバージョン確認 Ubuntuのバージョンを確認するために、端末を起動し(ショートカットキー:Ctrl+Alt+t)、以下のコマンドを実行する。 DISTRIB_CODENAMEの行を控えておこう。下の内容では「trusty」の部分を控えておく。 $ cat […]
  • Bioconductor Workflowパッケージ一覧Bioconductor Workflowパッケージ一覧 BioconductorのWorkflowパッケージの一覧をご紹介します。英語での説明文をgoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。パッケージを探す参考にしていただければ幸いです。 パッケージ確認日:2021/09/01 パッケージ数:29 1. rnaseqGene RNA-seq workflow: gene-level […]
  • カイ二乗検定 – 独立性検定カイ二乗検定 – 独立性検定 独立性検定とは、クロス集計表を作成したとき、2つの属性が独立であるかどうかを統計的に判定する方法である。 独立性検定を行う手順は次の通りである。 仮説を立てる。 帰無仮説H0:属性Ai(i=1,...,m)とBj(j=1,...,n)は独立である。 対立仮説H1:属性Ai(i=1,...,m)とBj(j=1,...,n)は少なくとも一つ以上は独立でない。 […]
  • UCI 機械学習リポジトリのデータセット一覧UCI 機械学習リポジトリのデータセット一覧 UCI machine learning repositoryで公開されているデータセットの一覧をご紹介します。英語での要約(abstract)をgoogle翻訳を使用させていただき機械的に翻訳したものを掲載しました。データセットのサンプルを探す参考にしていただければ幸いです。 掲載内容は2021年09月01日の情報で、データセット数は576です。 2.4 […]
  • アンケートの自由記述からニーズを抽出する方法アンケートの自由記述からニーズを抽出する方法 アンケートは様々な場面で有効活用されていると思うが、特に、「年齢」などの数量回答や、「男性・女性」、「満足度の5段階評価」などの単一回答、「購入動機を3つまで回答してください」などの複数回答は、集計や分析がしやすいため、重点的に活用していることだろう。 回答者の立場で考えると、数量回答・単一回答・複数回答は、設問者からの問いかけに対し、返答があらかじめ用意されていること […]
R データフレームのファクター列を2値に変換する方法