R programming function データ処理で使う関数まとめ

Rプログラミングで使用する関数の中で、事前のデータ処理で頻繁に使う関数をまとめています。
自分が頻繁に使うものを順次追加していきます。
RDocumentationのリンクが貼ってありますので原文を参照して頂くのが最も正確ですが、日本語でも使うシチュエーションなど簡単に分かるように記載しています。
例文はリンク先にあります。

列を扱うfunction

dplyr (version 0.7.8)

select: Select/rename variables by name

select(.data, ...)
列を抽出する際によく使う

rename(.data, ...)
列名を変更する際によく使う
selectと違い全てのデータを残す

dplyr (version 0.7.8)

pull: Pull out a single variable

pull(.data, var = -1)
1列を引用する際に使う

base (version 3.6.2)

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

dplyr (version 0.7.8)

filter: Return rows with matching conditions

filter(.data, ...)
条件に合う行のみを抽出

複数のData frameを扱うfunction

dplyr (version 0.7.8)

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 C

anti_join(df.x, df.y, by = “id”)
id name
1 3 c


行と列を扱う

tidytable (version 0.5.1)

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ではありません)

tidyr (version 1.1.3)

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に対して複数行を持つデータ処理

dplyr (version 1.0.10)

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ごとの複数行内操作がループ構文を使わずに簡便に書けます


タグ: ,