R logo

R にデータを取り込んで、そこから最初に行う作業の備忘録。

データのインポート

私は、データベースからエクセル (.xlsx) でデータを取得し、それを R に取り込む場合が多い。

エクセルの取り込みは、

readxl::read_xlsx(ファイル名.xlsx)

で行う。

そのままファイル名を指定:同じフォルダ内にデータがある場合

R ディレクトリと同じフォルダにデータがある場合は、そのままファイル名を入れればOK。

Data - readxl::read_xlsx("excel-data.xlsx")

アドレス指定1:デスクトップ等にデータがある場合

デスクトップ等、別の場所にデータがある場合は、そのアドレスを指定する。

e.g. D ドライブ内のデスクトップにデータがある場合 ▼

Data - readxl::read_xlsx("D:/Desktop/excel-data.xlsx")"

e.g. D ドライブに作った R > R directory > ProjectA にデータがある場合 ▼

Data - readxl::read_xlsx("D:/R/R directory/ProjectA/excel-data.xlsx")"

アドレス指定2: ディレクトリの近くのフォルダにデータがある場合

同じ階層のフォルダだと

./

上の階層のフォルダだと

../

の様に指定できる。

e.g. 同じフォルダ内にある "projectA" というフォルダ内にデータがある場合 ▼

Data - readxl::read_xlsx("./ProjectA/excel-data.xlsx")"

e.g. 一つ上のフォルダ内にデータがある場合 ▼

Data - readxl::read_xlsx("../excel-data.xlsx")"

e.g. 一つ上のフォルダにある "projectA" というフォルダ内にデータがある場合 ▼

Data - readxl::read_xlsx("../ProjectA/excel-data.xlsx")"

列名の変換

エクセルデータの中には、ハイフン "-" とか半角スペースとか、演算子と誤認識されてデータ処理に困る名前の列があったりする。

まずはそれらの名前を変更する。

dplyr::rename(データ, "変更後の名前" = "変更前の名前")

e.g. "LBD/AD" という名前を "Path" という名前に変更したい場合 ▼

Data - dplyr::rename(Data, Path = "LBD/AD")

" "
はいらないけれど、演算子で使われる文字が入っている場合には " " で括って「これ全体で名前ですよ」と示しておく。

入力指定しただけではデータは変換されないので、変更を反映させるために

Data -
-> Data
等、代入演算子を使ってデータを上書きする。

e.g. パイプでつなぐ場合 ▼

Data %>%
    dplyr::rename(Path = "LBD/AD") -> Data

データ型の変換

データを取り込んだら、その内容をみて R がデータ型を判断してくれる。

ベクトルの方には以下の大小関係があり、

character > complex > numeric > logical > NULL

文字と認識される要素が一つでも入っていたら character... の様に変換される。

自分の求めているデータ型と違うようにあてがわれる事が多いので、その場合は、自分の解析に都合の良いようにデータ型を変換する。

数値 → 文字列型 (character) への変換

ID とか、数値で入力されているけれども、実際には数値ではなく名前だったりすることがある。

でも数値で書かれているから R では数値型 (numeric) として認識される。

このような列を文字列型 (character) として認識してほしい場合。

方法1. dplyr::mutate()

dplyr パッケージの mutate 関数を使う。

dplyr::mutate(データ, 列 = as.character(列))

e.g. "AutopsyID" を numeric -> character に変更したい場合 ▼

Data - dplyr::mutate(Data, AutopsyID = as.character(AutopsyID))

e.g. パイプでつなぐ場合 ▼

Data %>%
    dplyr::mutate(AutopsyID = as.character(AutopsyID)) -> Data

方法2. plyr::revalue()

plyr パッケージの revalue 関数を使う。

plyr::revalue(as.character(データ$列))

e.g. "AutopsyID" を numeric -> character に変更したい場合 ▼

Data - plyr::revalue(as.character(Data$AutopsyID))

数値を特定の文字に変えて、文字列型 (character) として認識してほしい場合

plyr パッケージの revalue 関数で、文字を指定する。

plyr::revalue(データ$列, as.character(データ$列), c("ラベル1", "ラベル2", ...))

e.g. "Sex" という列の、数値 "0" を "Male"、数値 "1" を "Female" に変更したい場合 ▼

Data$Sex - plyr::revalue(as.character(Data$Sex, c(
        "0"="Male",
        "1"="Female"
        )))

文字列型 (character) → 数値型 (numeric) への変換

時々、数値なはずなのに一部文字列として認識されていて、列全体が文字列型 (character) になっている事がある。

数値型 (numeric) でないと平均値とか色々計算できなくなるので、列のデータ型を数値型 (numeric) に変換する。

方法1. dplyr::mutate()

dplyr パッケージの mutate 関数を使う。

dplyr::mutate(データ, 列 = as.numeric(列))

e.g. "Stage" という列にもともと数値が入力されているのに文字列型 (character) として認識されていて、character -> numeric に変更したい場合 ▼

Data - dplyr::mutate(Data, Stage = as.numeric(Stage))

e.g. パイプでつなぐ場合 ▼

Data %>%
    dplyr::mutate(Stage = as.numeric(Stage)) -> Data

方法2. plyr::revalue()

plyr パッケージの revalue 関数を使う。

Data - plyr::revalue(データ$列, as.character(データ$列))

e.g. "AutopsyID" を numeric -> character に変更したい場合 ▼

Data$AutopsyID - plyr::revalue(as.character(Data$AutopsyID))

文字 -> 数字に変換して、データ型を数値型 (numeric) にする場合: plyr::revalue()

もともと文字列が入力されていたけれども、解析の都合で数値型 (numeric) に変換したい場合。

plyr パッケージの revalue 関数を使う。

plyr::revalue(データ$列, as.character(データ$列), c("変更前の文字列1" = "変更後の数値1", 変更前の文字列2" = "変更後の数値2",,,,))

e.g. "ADNC" という列で、"Not", "Low", "Int", "High" という文字列が入力されており、それを順に "0", "1", "2", "3" という数値に変換したい場合 ▼

Data$Stage -plyr::revalue(as.character(Data$Stage), c(
    "Not"="0",
    "Low"="1",
    "Int"="2",
    "High"="3"
    )) %>%
    as.numeric()

文字列型 (character) → 因子型 (factor) への変換

文字列に順序があり、因子型 (factor) へ変換したい場合。

factor() でレベルを指定する。

factor()

factor(データ$列, levels=c("レベル1" , "レベル2",...))

e.g. "Not", "Low", "Int", "High" という文字列が入った "ADNC" の列を character -> factor に変更し、"Not" -> "Low" -> "Int" -> "High" の順番で順位付けしたい場合 ▼

Data$ADNC - factor(Data$ADNC, levels=c(
        "Not",
        "Low",
        "Int",
        "High"
        ))

数値型 (numeric) → 因子型 (factor) への変換

データでは数値で入力されているけれども、平均値とか出すわけではなく、ステージなどの因子 (factor) だったりすることも多い。

でも数値で書かれているから R では数値型 (numeric) として認識される。

このような数値型 (numeric) の列を因子型 (factor) として認識してほしい場合。

方法1. as.factor()

データ$列 - as.factor(データ$列)

e.g. "Stage" という列の、数値型 (numeric) で認識されている "0","1","2","3"...という数値を、因子型 (factor) として認識して欲しい場合 ▼

Data$Stage - as.factor(Data$Stage)

数値の順番をそのまま因子型の要素として認識してもらうことになる。

方法2. factor()

データ$列 - factor(データ$列)
Data$Stage - factor(Data$Stage)

levels を指定しなければ、数値の順番をそのまま因子型の要素として認識してもらうことになる。

方法3. dplyr::mutate()

dplyr パッケージの mutate 関数で上書きする。

Data -> mutate(データ, 列 = as.factor(列))

e.g. "Stage" という列の、数値型 (numeric) で認識されている "0","1","2","3"...という数値を、因子型 (factor) として認識して欲しい場合 ▼

Data - mutate(Data, Stage = as.factor(Stage))

e.g. パイプでつなぐ場合 ▼

Data %>%
    mutate(Stage = as.factor(Stage)) -> Data

numeric -> factor に変換した場合、数値の小さい順から factor の順序がつけられる。

方法2. plyr::revalue()

plyr パッケージの revalue 関数を使う。

plyr::revalue(as.factor(データ$列))

e.g. "Stage" を numeric -> factor に変更したい場合 ▼

Data$Stage - plyr::revalue(as.factor(Data$Stage))

数値型 (numeric) を特定の文字に変えて、因子型 (factor) に変更したい場合

plyr パッケージの revalue 関数で、文字を指定し、factor で levels を指定する。

plyr::revalue(as.character(データ$列) , c("変更前の数値1"="変更後の文字列1", "変更前の数値2"="変更後の文字列2",...))
factor(データ$列, levels = c(レベル1", "レベル2",...))

e.g. "ADNC" という列で、"0", "1", "2", "3" という数値が入力されており、これをそれぞれ "Not", "Low", "Int", "High" という文字列に変えて、因子型 (factor) に変更したい場合 ▼

Data$ADNC - plyr::revalue(as.character(Data$ADNC), c(
    "0" = "Not",
    "1" = "Low",
    "2" = "Int",
    "3" = "High"
    ))
Data$ADNC - factor(Data$ADNC, levels = c(
    "Not",
    "Low",
    "Int",
    "High"
    ))

e.g. パイプでつなぐ場合 ▼

Data$ADNC - plyr::revalue(as.character(Data$ADNC), c(
    "0" = "Not",
    "1" = "Low",
    "2" = "Int",
    "3" = "High"
    )) %>%
    factor(levels = c(
    "Not",
    "Low",
    "Int",
    "High"
    ))

因子型 (factor) -> 数値型 (numeric) への変換

因子型 (factor) -> 数値型 (numeric) への変換は、以前書き留めておいたので、下記参照 ▼

にほんブログ村 科学ブログ 脳科学へ
にほんブログ村 子育てブログ ワーキングマザー育児へ