Rプログラミングで使用する関数の中で、事前のデータ処理で頻繁に使う関数をまとめています。
自分が頻繁に使うものを順次追加していきます。
RDocumentationのリンクが貼ってありますので原文を参照して頂くのが最も正確ですが、日本語でも使うシチュエーションなど簡単に分かるように記載しています。
例文はリンク先にあります。
列を扱うfunction
目次
- 1 select: Select/rename variables by name
- 2 pull: Pull out a single variable
- 3 table: Cross Tabulation and Table Creation
- 4 filter: Return rows with matching conditions
- 5 join: Join two tbls together
- 6 pivot_longer.: Pivot data from wide to long
- 7 pivot_wider: Pivot data from long to wide
- 8 group_by: Group by one or more variables
select: Select/rename variables by name
select(.data, ...) 列を抽出する際によく使う rename(.data, ...) 列名を変更する際によく使う selectと違い全てのデータを残す
pull: Pull out a single variable
pull(.data, var = -1) 1列を引用する際に使う
table: Cross Tabulation and Table Creation
table(…, exclude = if (useNA == "no") c(NA, NaN), useNA = c("no", "ifany", "always"), dnn = list.names(…), deparse.level = 1)as.table(x, …) is.table(x)# S3 method for table as.data.frame(x, row.names = NULL, …, responseName = "Freq", stringsAsFactors = TRUE, sep = "", base = list(LETTERS)) クロス集計表の作成などにftable()と合わせて使用
data.frame化すると更に便利になります
DF$Freqを見て頂くと分かるように、Freqの列に総当たりの頻度を算出してくれています要素の組み合わせ数をカウントするのに非常に便利なコマンドです
DF = data.frame(table(data))
DF$Freq
[1] 1 1 3 49 3 2 1 1 1 1 1 1 2 1 10 2 7 1 1 1 1
[22] 1 54 1 202 4 1 1 6 1371 1 6 124 272 4 1 1 1 4 4 3 1
[43] 1 3 2 1 2 2 3 1 1 1 1 3 2 3
行を扱うfunction
filter: Return rows with matching conditions
filter(.data, ...) 条件に合う行のみを抽出
複数のData frameを扱うfunction
join: Join two tbls together
inner_join(x, y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...) xとyがマッチする行のみ left_join(x, y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...) xの全ての行を保持し、yにマッチする行があったら全て保持 right_join(x, y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...) yの全ての行を保持し、xにマッチする行があったら全て保持 full_join(x, y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...) xとyの全ての行を保持 semi_join(x, y, by = NULL, copy = FALSE, ...) xの全ての行を保持、yにマッチする行があっても元のxの行だけ保持 ※yの列は返さない anti_join(x, y, by = NULL, copy = FALSE, ...) yにマッチしないxの行のみ保持 ※yの列は返さない
left_joinなどは有名ですが、anti_joinなどは余事象を求めたい時によく使います
例えば複数条件で削除した集団のバックグラウンドはどうですか?とレビュアーに聞かれたときにはこの余事象のデータが必要です
v.x <- c(1,2,3)
v.x1 <- c(“a”,”b”,”c”)v.y <- c(1,2,4)
v.y1 <- c(“A”,”B”,”C”)df.x <- data.frame(id = v.x, name = v.x1)
df.y <- data.frame(id = v.y, name = v.y1)df.x
id name
1 1 a
2 2 b
3 3 c
df.y
id name
1 1 A
2 2 B
3 4 Canti_join(df.x, df.y, by = “id”)
id name
1 3 c
行と列を扱う
pivot_longer.: Pivot data from wide to long
pivot_longer.( .df, cols = everything(), names_to = "name", values_to = "value", values_drop_na = FALSE, ... ) .dfはデータを colsには縦長にしたいデータ列名を””で names_to, values_toはそれぞれ新しくできる列に名前を付けます(入れなくて出来ます) values_drop_naは縦長にする列内にNAがあれば脱落させます(空欄はNAではありません)
pivot_wider: Pivot data from long to wide
pivot_wider( data, id_cols = NULL, names_from = name, names_prefix = "", names_sep = "_", names_glue = NULL, names_sort = FALSE, names_repair = "check_unique", values_from = value, values_fill = NULL, values_fn = NULL, ... ) pivot_widerは縦長のデータを横長にする関数です 縦に冗長なデータを横にが長くします よく使うシーンは、同じIDで複数の行が生成されている場合に視認性を高めるために横長にします
横長のデータを縦に連結したい
縦長のデータを横に連結したい
そんな時に以前使われていたのはgather(), spread()などの関数ですが
圧倒的に便利な関数が出たのでこちらのpivot関数を使いましょう
1つのIDに対して複数行を持つデータ処理
group_by: Group by one or more variables
data = dplyr::tibble(aa = c("a", "b", "c", "a"), bb = c("aaa", "aaa", "aba", "ccc"))
data1 = data %>% dplyr::group_by(aa) %>% dplyr::summarise(sumtxt = paste0(bb, collapse = ","))
group_byからのsummarise関数は使いこなせると本当に便利です
例えばIDごとの数値処理や、IDごとの複数行内操作がループ構文を使わずに簡便に書けます