Rで使う正規表現の色々
Rでよく使う正規表現のパターンを、カテゴリー別に整理してみた。 Rで使用する正規表現いろいろ 文字の検索・位置指定に関するパターン パターン 説明 例 ^ 文字列の先頭を指定 ^Hello は “Hello World” に一致 $ 文字列の末尾を指定 World$ は “Hello World” に一致 \\b 単語の境界 (word bounda […]
Rでよく使う正規表現のパターンを、カテゴリー別に整理してみた。 Rで使用する正規表現いろいろ 文字の検索・位置指定に関するパターン パターン 説明 例 ^ 文字列の先頭を指定 ^Hello は “Hello World” に一致 $ 文字列の末尾を指定 World$ は “Hello World” に一致 \\b 単語の境界 (word bounda […]
文字列に特定の文字が含まれている行を抽出したい場合、grepl()を使うと便利。 grepl()の特徴 grepl()は、文字列に特定のパターンが含まれるかどうかをTRUE/FALSEで返す。 データフレームの行抽出の際に便利。 特定の文字を含む行を抽出:grepl() データフレームの作成 以下のようなデータフレームを作ってみる。 # サンプルデータフレーム df <- data.fram […]
文字列の抽出には、stringrパッケージのstr_extract()やstr_extract_all()を使う。 また、数値の抽出には、readrパッケージのparse_number()も使える。 3つの関数のざっくりとしたイメージは以下の通り。 str_extract(), str_extract_all(), parse_number()の特徴 str_extract():最初の一致を抽出 […]
特定の条件にマッチするかどうかを判定する関数には、str_detect() と grepl()を使うことができる。 str_detect() は stringr パッケージの関数で、grepl() はRの標準パッケージ(base)。 どちらとも正規表現が使える。 シンプルな検出なら grepl() でもよいけれど、str_detect()の方が汎用性が広いので、こちらをよく使っている。 また、st […]
str_count(string, pattern) は、文字列内に正規表現pattern がいくつ出現するかをカウントする関数。 この関数は、stringr パッケージに含まれているので、まずは、library(stringr) でパッケージを読み込む。 install.packages("stringr") library(stringr) str_count() str_count()の基本 […]
文字列を繰り返し複製する時には、str_dup() と strrep()などを使う。 str_dup():stringrパッケージの関数で、ベクトル化が簡単、使い方が直感的。 strrep():base R (標準関数)の関数で、追加パッケージのインストールは不要。 類似の関数にrep()があるけど、これは、ベクトル全体を繰り返すのに使う。str_dup()とstrrep()は文字列 […]
文字列のフォーマットを変更する時には、stringrパッケージに含まれているstr_to_upper(), str_to_lower(), str_to_title(), str_to_sentence()等を使う。 文字列のフォーマットを変更する関数 大文字にしたい → str_to_upper() 小文字にしたい → str_to_lower() タイトルケースにしたい → str_to_ti […]
あるvectorの要素を繋げて一つの文字列にしたい場合、str_flatten()やpaste0()を使う。 どちらも文字列を結合(連結)するための関数だけれど、使い方や挙動にいくつかの違いがある。 str_flatten() str_flatten() は、stringrパッケージの関数で、ベクトル内の要素を1つの文字列に結合するために使う。 ベクトル内の各要素を、collapseの区切り文字で […]
文字列を部分的に抽出したり、置換したりするときには、R標準パッケージ(base)のsubstr()、もしくは stringrパッケージならstr_sub()を使う。 substr()とstr_sub()の違い substr() は、Rの標準関数で、インストール不要でどこでも使える。 str_sub() は、stringrパッケージの関数で、可読性が高く、機能が充実。 実際には、以下の […]
文字列の中の文字数をカウントする方法としては、R標準パッケージ(base)に含まれるnchar()関数や、stringrパッケージのstr_length()関数等を使う。 ここでは主にstr_length()関数についてまとめておく。 str_length() str_length() の基本構造 str_length(string) 引数 string: 文字列または文字ベクトル。str_len […]
2つのデータフレームを結合するときには、dplyr::join()関数を使う。 join()関数は、dplyrパッケージの関数なので、まずはdplyrパッケージをインストールして読み込む必要がある。 install.packages("dplyr") library(dplyr) ただし、join()という関数自体はdplyrには存在せず、inner_join()、left_join()、righ […]
Rのrownames()関数は、データフレームや行列(matrix)の行名(row names)を取得または設定するための関数。 基本的な使い方 行名を取得する rownames(データフレームまたは行列) 例: df <- data.frame(A=1:3, B=c("X", "Y" , "Z" )) rownames(df) # 行名を取得 output [1] "1" "2" "3" […]
前回、R標準パッケージ(base)とstringrパッケージの比較をしてみて、「処理速度は、場合によってはbase、場合によってはstringrの方が速い」ということがわかった。 で、具体的にどのときにbase、どのときにstringrが速いのか、調べてみた。 処理速度に関する違い stringr の方が速い場合 ベクトル化された処理が可能なため、stringrの方が速くなることがある。 一貫した […]
[ ] (square brackets)を使って、各要素にアクセスする方法は、下記参照。 この基本を使って、データフレームの列を抽出する。 今回は、下記データ(Data)を使用。 > print(Data) ID Cohort Sex Age ADNC LBDSubtype 1 149 LBD M 83 Low BP 2 634 AD M 78 High DN 3 632 AD F 75 Hig […]
[ ] (square brackets)を使って、各要素にアクセスする方法は、下記参照。 この基本を使って、データフレームの行や列を抽出する。 今回は、下記データ(Data)を使用。 > print(Data) ID Cohort Sex Age ADNC LBDSubtype 1 149 LBD M 83 Low BP 2 634 AD M 78 High DN 3 632 AD F 75 H […]
Rで文字列操作を行う際に、標準パッケージ(baseパッケージ)やstringrパッケージを使っていることが多いと思う。 私の周囲にはstringrを好む人が多いけれども、実際、どちらを使った方がよいのか、調べてみた。 R標準パッケージ、stringrパッケージの比較 標準パッケージ (base R) メリット 追加インストールが不要:どの環境でもすぐに使用可能。 小規模データでは、実行速度が速い: […]
例えば、下記データフレームを作る。 # データフレームを作成 df <- data.frame( x = c("A", "B", "C"), y = c(1, 3, 5), z = c("Apple", "Banana", "Cherry") ) # データフレームを表示 print(df) output > print(df) x y z 1 A 1 Apple 2 B 3 Bana […]
例えば下記データ(Data_c)がある。 X ID Cohort Sex Age ADNC 1 1 232493 LBD Male 83 Low 2 2 326342 AD Male 78 High 3 3 326322 LBD Female 75 Low 4 4 219018 LBD Male 74 Low 5 5 326217 AD Male 78 High 6 6 324906 LBD Ma […]
データをインポートしたらまず始めにする作業。 今回は、同じ階層にある”my_Data”というエクセルファイルをインポート library(readxl) Data_C <- readxl::read_xlsx("../my_Data.xlsx") str()でデータの中身を確認する。 str(Data_C) output tibble [1,052 × […]
下記のようなデータが得られて、 1行目の値を列名に宛てがいたい場合。 colnames() で列名を1行目に指定した後、1行目を削除する。 colnames(df7) <- df7[1,] df7 <- df7[-1,]
下記のようなデータフレーム(df)があり、行を昇順or降順で並べ替えたい時。 私が使いやすいと思う順で arrange() , order , sort() の使い方を書き留めておく。 dplyr::arrange() 関数 arrange() はdplyrのパッケージの中に入っている。 install.packages("dplyr") library(dplyr) 昇順で並べ替え 方法は、 a […]
下記のようなデータがあって、行と列を入れ替えたい場合。 t(データ) でOK。 df6 <- t(df5) ただこれだと行列で返ってくるので、 > class(df6) [1] "matrix" "array" > is.data.frame(df6) [1] FALSE as.data.frame でデータフレームに戻す。 > df7 <- as.data.fram […]
下記のようなデータがあって、 “Deceased” が “True” と “False” と入力されている症例がそれぞれどれくらいずつあるか count(group_by()) で求めると、 Dat1 <- read_xlsx("./Data/test.xlsx") %>% rename(OldestCDR = ' […]
例えば、下記のようなデータがあって、 “Deceased” が “True” と “False” と入力されている症例がそれぞれどれくらいずつあるか知りたい時。 count(group_by()) で求める。 Dat1 <- read_xlsx("./Data/test.xlsx") %>% rename(Olde […]
カテゴリデータの集計表⇔データフレームの切り替え。 クロス集計表 例えば、 運動あり 運動なし 認知症あり 10 15 認知症なし 20 5 のようなデータの集計表を作る時。 基本は行列で作る。 行列(matrix)で作る場合 行列で作る場合は下記。 # クロス集計表を作る x < matrix(c(10, 15, 20, 5), byrow=TRUE, ncol=2) dimnames(x […]
↑ これは見やすいけど、Rで計算する場合は tidy data じゃないのでちょっと困る。 これを、Rに取り込んで、tidy data に変換する方法。 tidy data と messy data については、多くのサイトで詳しく紹介されているので、ここでは割愛。 データの取り込み まずは、もらった “Fig044_BlMSA03-2dHipp.xlsx” という名前の […]
列A、列B、列C…の各行毎に平均値を出して、それぞれ新しい列に結果を追加する方法3つ。 個人の練習も兼ねて前後の工程も記載しているので、あしからず。 事前準備 データの取り込み 人からもらった、とあるデータを取り込む。 Dat1 <- read.csv("./Data/Fig055.csv", header=TRUE) 結果は下記。 データのチェック 取り込んだデータの5-7列に […]
前回の続き。 下記データフレーム(Dat)で、”Expenses” の値を補完しようと思うけど、 17行目の “Expenses” は、両隣の “Revenue” と “Profit” から計算できる。 この場合は、 “Expenses (経費)” = “Revenu […]
NAの取り扱いシリーズ第4段。 今回は、他のデータから推測して補完する方法。 よく使われるのは、中央値(median)で補完する方法。 場合によっては平均値(mean)でもいいけど、中央値の方が外れ値の影響を受けにくいので、中央値の方が好まれる。 群の中央値で補完 (1) 例えば下記のようなデータフレーム(Dat)で、”Employees” のデータが2箇所欠 […]
NAの取り扱いシリーズ第3段。 今回は、他のデータから予測できる場合にその情報を使って補完する方法。 他のデータを使って補完 例えば下記のようなデータフレームがあった場合、 “State” が<NA>になっているけど、隣の “City” がわかっていれば100%推測可能。 New Yorkはニューヨーク州(NY)だし、San […]
NAの取り扱いシリーズ第2段。 今回は、NAがある行を取り除いて解析する方法。 NAのある行を抽出 まずは、前回のおさらい。 全体でNAがある行を抽出する方法。 Dat[!complete.cases(Dat),] で、例えば “Industry” の列に欠損値がある行を選出する方法。 Dat[is.na(Dat$Industry),] すると、”Industr […]
データ整理をしていると、データが抜けていて欠損値になっている事がある。 この時の対処方法いろいろ。 前処理:空欄を NA に置き換えてデータをインポートする 例えば、下記のようなデータがあって、いくつか空欄がある。 これをRに取り込むと、 Dat <- read.csv("Data.csv") 空欄部分は時々空欄のまま、時々”NA”として認識される。 こ […]
データフレームの列の順番を並び替える時は、列選択で使用する dplyr::select を使う。 例えば、下記の様なデータフレーム(データ名: Dat1)があって、 これを左から 「Sex -> Genotype -> Region -> Area -> NFT -> FN -> それ以外の列」 とゆーふーに並べ変えたい場合、 dplyr::select(Dat […]
データフレーム内の合計や平均値などを求める時、Rでは「aggregate関数」が用意されているけど、比較的作業時間がかかるため、「dplyr::summarise」の方が良さげ。 ちょっとした集計:dplyr::summarise 全体での平均値を出す場合 例えば、下記テーブル “Data” の “FN” と “NFT” の列 […]
文字列から一部だけ切り出して、新しい列を作りたい時。 列の追加は dplyrパッケージ: mutate 文字の切り出しは R標準パッケージ: substr or substring stringrパッケージ: str_sub 等を使う。 substr 例えば、下記テーブル “Data” の “Group” 列の左から3番目の文字 “ […]
Rで列を追加する時は、 dplyr::mutate() を使っている。 mutate(列A+列B) のように計算式の結果を入れられるので便利だけど、文字列を入れる時はこんな感じ ▼ 例:Data というデータフレーム内で、 Age が “Young” or “Aged” Sex が “Male” or “Femal […]