Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

dplyr と purrrを用いたデータハンドリング

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Wird geladen in …3
×

Hier ansehen

1 von 100 Anzeige

dplyr と purrrを用いたデータハンドリング

Herunterladen, um offline zu lesen

専修大学大学院博士課程の杣取(そまとり)です。Rのパッケージ群tidyverse内に入っているdplyrとpurrrを用いたデータハンドリングに関する資料です。データハンドリングには様々なやり方がありますが、なるべくミスなく効率よく行うための工夫について解説しています。また、元々のデータが整然データではない時に、tidyverseパッケージは大活躍します。

専修大学大学院博士課程の杣取(そまとり)です。Rのパッケージ群tidyverse内に入っているdplyrとpurrrを用いたデータハンドリングに関する資料です。データハンドリングには様々なやり方がありますが、なるべくミスなく効率よく行うための工夫について解説しています。また、元々のデータが整然データではない時に、tidyverseパッケージは大活躍します。

Anzeige
Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Ähnlich wie dplyr と purrrを用いたデータハンドリング (20)

Anzeige

Aktuellste (20)

dplyr と purrrを用いたデータハンドリング

  1. 1. dplyr & purrr を⽤いたデータハンドリング
  2. 2. About Me • 杣取 恵太(そまとり けいた) • 専修⼤学⼤学院⽂学研究科⼼理学専攻 博⼠2年 • ⽇本学術振興会 特別研究員(DC1) • 研究テーマ: ⎻ 恐怖条件づけの個⼈差 ⎻ メタ認知の認知モデリング • 趣味: ⎻ ⿇雀、ダーツ
  3. 3. 本資料の内容 dplyr と purrr(ちょこっとtidyr)を使って データを楽にハンドリングする!
  4. 4. tidyverseワークフローにおける本資料の位置付け データの 読み込み 可視化 モデル化 dplyr purrr 整然化 変形 プログラミング
  5. 5. 本発表で使うパッケージ library(tidyverse) library(stringr)
  6. 6. まずはデータの読み込み データの 読み込み 整然化 変形 可視化 モデル化プログラミング
  7. 7. 扱うデータの確認 平成26年度患者調査56: 精神科病院の推計患者数,年齢階級 × 性・疾病分類(精神及び⾏動の障害) × ⼊院-外来別 (https://www.e-stat.go.jp/SG1/estat/GL08020103.do?_toGL08020103_&listID=000001141596&requestSender=dsearch)
  8. 8. タイトル⾏ 性別を表すセルが1つだけ ⽋測がハイフン 突然の要約量
  9. 9. • 解析しやすいようにデータを記録する。 もちろん本当は
  10. 10. • 解析しやすいようにデータを記録する。 • 汚いデータをなんとか読み込んでうまいこと ハンドリングする ⇨ tidyverse 今回は
  11. 11. なるべく綺麗に読み込む outpatient_26 <- readr::read_csv(“26.csv”, ## 平成26年の調査データ --- locale = readr::locale(encoding = "cp932"), skip = 2) view(outpatient_26) ## データの確認
  12. 12. 整然データ化 データの 読み込み 整然化 変形 可視化 モデル化プログラミング
  13. 13. slice() • 特定の⾏のみ抜き出し(削除)
  14. 14. slice() outpatient_ 26 < outpatient_26 %>% slice(5:8) 5-8⾏⽬を 抜き出す
  15. 15. filter() • 特定の値を含む⾏を取り出す ◯ ◯ × × ▲
  16. 16. filter() outpatient_ 26 < outpatient_26 %>% filter(X2 !="総数") “X2”列の中 で”総数”と いう値以外 の⾏を残す
  17. 17. select() • 特定の列を取り出す(削除)
  18. 18. select() outpatient_ 26 < outpatient_26 %>% select(-3) 3列⽬を削除
  19. 19. select() outpatient_ 26 < outpatient_26 %>% select(-23:-26) 23-26⾏⽬も削除
  20. 20. ここまで3つのまとめ slice(): ⾏操作 filter(): (列の値で)⾏操作 ◯ ◯ × × ▲ select(): 列操作
  21. 21. ここまでの関数を使ってデータを整形してみる outpatient_26 <- outpatient_26 %>% fill(X1) %>% ## X1を前の値で埋める(男, 男, 男, ...となる) --- slice(46:63) %>% ## 46-63⾏⽬を抜き出す --- filter(X2 !="総数") %>% ## ”X2”列の値が”総数”以外の⾏を残す --- filter(X2 !="(再掲)精神及び⾏動の障害") %>% select(-3) %>% ## 3列⽬を削除 --- select(-23:-26) %>% ## “X1”を”sex”に、”X2”を” disease_name”に --- rename(sex=X1, disease_name=X2)
  22. 22. それなりに綺麗な形になる ここの部分が整然 データっぽくない
  23. 23. tidyr::gather()でロングデータにする outpatient_26 <- outpatient_26 %>% tidyr::gather(`0歳`:90歳以上, key=age,value="count") 0歳 90歳 以上 age count 0歳 2.0 0歳 - … - … 1.0 … - 90歳以上 0.5 90歳以上 - 90歳以上 10.0 “0歳”から”90歳”以上の列までのデータを縦に展開する。その際、元々の列名 は”age”という列名にして、各セルの値は”count”という列名にする。
  24. 24. 今度こそそれっぽい形になった
  25. 25. • ⽋測値をNAにしたい • データ形をnumericにしたい • 謎のスペースを消したい
  26. 26. 最後に微調整する ## ”count”列の値が”-”になっていればNAに変換 --- outpatient_26$count <- ifelse(outpatient_26$count=="-", NA, outpatient_26$count) ## ”desease_name”列の各セルにあるスペースを削除 --- outpatient_26$disease_name <- str_trim(outpatient_26$disease_name, side="both") ## ”count”列の各セルを数値型にする --- outpatient_26$count <- as.numeric(outpatient26_$count)
  27. 27. 完成
  28. 28. データをいじってみる データの 読み込み 整然化 変形 可視化 モデル化プログラミング
  29. 29. 統合失調症について、外来患者数をまとめたい • “disease_name”列の値が”統合 失調症、統合失調型障害及び妄 想性障害”となっている⾏を抜き 出す。 • NAは今回無視したいので、 “count”列がNAではない⾏を抜 き出す
  30. 30. filter()でデータの抜き出し ## ” disease_name”列の値が統合失調症の⾏だけ取り出す --- ## ”count”列の値がNAの⾏は削除 --- schizo <- outpatient_26 %>% filter(disease_name == "統合失調症, 統合失調症型障害及び妄想性障害", !is.na(count)) sex disease_name age count … … … … … 統合失調症 … NA … 統合失調症 ... 1,5 … … … … … 統合失調症 … 3.0
  31. 31. 完成
  32. 32. ggplot()で可視化する データの 読み込み 整然化 変形 可視化 モデル化プログラミング
  33. 33. 年齢ごとに外来患者数をプロット ggplot(data = schizo) + geom_bar(aes(x=age,y=count),stat="identity") + ## Macの場合はフォント指定しないと⽂字化ける --- theme_set(theme_gray(base_family="Hiragino Kaku Gothic Pro W3")) + ## グラフが浮くのを防ぐ --- scale_y_continuous(expand = c(0,0))
  34. 34. 外来患者数の多い疾患トップ10が知りたい • 列の値を使って⾏を並び替えたい • カテゴリ変数について可視化した時にみやすくしたい • 上位と下位に分けたい 1 2 3 4 5 2 1 4 3 5
  35. 35. arrange() • ⾏を並び替える 1 2 3 4 5 2 1 4 3 5
  36. 36. arrange() ## ”count”列の値で並び替える --- ## desc()を使うと降順、使わなければ昇順になる --- top10 <- outpatient_26 %>% arrange(desc(count)) ## top10の1-10⾏⽬を出⼒ --- top10 <- top10[1:10,]
  37. 37. 並び替えた結果 • 男性が多い • 40-60代が多い
  38. 38. 疾患ごとの平均外来患者数が知りたい age count 気分障害 0歳 2.0 … 0歳 NA 気分障害 … NA 気分障害 90歳以上 0.5 気分障害 90歳以上 NA 統合失調症 0歳 0 統合失調症 0歳 0 … … NA 統合失調症 90歳以上 2.0 神経症性障害 0歳 1.4 神経腫性障害 0歳 … mean 気分障害 2.0 統合失調症 1.2 神経症性障害 3 アルコール障害 0.5 その他 2 • 疾患ごとに平均外来患者数を算出して、 外来患者の多い疾患が知りたい
  39. 39. summarize() • 関数をまとめて適⽤する • データの要約に便利
  40. 40. summarize() ## max_mean_minという変数にsummarize()の結果を保存 --- temp <- outpatient_26 %>% ## ”count”列の値にmax()を適⽤した結果を”max”列に --- summarize(max = max(count,na.rm=T), ## ”count”列の値にmean()を適⽤した結果を”mean”列に --- mean = mean(count,na.rm=T), ## ”count”列の値にmin()を適⽤した結果を”min”列に --- min = min(count,na.rm=T)) ## na.rm=Tは「NAを無視して関数を適⽤してね」という意味 ---
  41. 41. 全部まとめて関数を適⽤している • これだともうなんなのかよく分からない
  42. 42. Desease_name count 気分障害 統合失調症 統合失調症 気分障害 気分障害 group_by() • summarize()の仲間みたいな関数 • 列の値に従って、複数の⾏をグループ化する
  43. 43. group_by() & summarize() temp <- outpatient_26 %>% ## “desease_name”列の値ごとにgroup化 --- group_by(desease_name) %>% ## グループごとに、” count”列の値について平均&標準偏差を算出 --- summarize(mean = mean(count, na.rm = T), sd = sd(count, na.rm = T)) グループの情報は⽬に⾒えない形で存在し、 以降の関数適⽤では常に考慮される → ungroup()でグループ化解除
  44. 44. 疾患ごとに要約統計量を算出できた
  45. 45. 統合失調症が群を抜いて多い
  46. 46. この集計で満⾜して良いのか? • arrange()を使った時の感じだと性 差はそれなりにありそう • 標準偏差が結構⼤きい → もう少し細かくグループ化を!
  47. 47. 疾患ごと、性別ごとに平均と標準偏差を出す temp <- outpatient_26 %>% ## 追加のグループ化は簡単にできる --- group_by(disease_name,sex) %>% summarize(mean = mean(count, na.rm = T), sd = sd(count, na.rm = T))
  48. 48. 気分障害は⼥性に多いが、統合失調症は男性に多い
  49. 49. mutate() • 新しい列を作る
  50. 50. 標準化得点算出して結合する ## 全体の平均と標準偏差を出す --- temp <- outpatient_26 %>% summarize(mean = mean(count, na.rm = T), sd = sd(count, na.rm = T)) ## (“count”列の値ー平均)/標準偏差をすることで、標準化 --- ## 標準化得点を新しい列として結合 --- temp <- outpatient_26 %>% mutate(stan_score = (count - temp$mean)/temp$sd) sex desease_name age count sex desease_name age count stan_score
  51. 51. 改めて平均・標準偏差とエラーバーの上限・下限を計算 temp <- temp %>% ## 疾患ごと、性別ごとにグループ化 --- group_by(disease_name, sex) %>% ## グループごとに”stan_socre”列の平均と標準偏差を算出 --- summarize(mean = mean(stan_score, na.rm = T), sd = sd(stan_score, na.rm = T)) %>% ## 上限を平均+標準偏差、下限を平均-標準偏差として計算し、 --- ## 新しい列として結合 --- mutate(upper = mean + sd, lower = mean - sd)
  52. 52. 難しくなってきたのでイメージ図 sex desease_name age count sex desease_name age count group_by sex desease_name mean sd summarize mutate sex desease_name mean sd upper lower
  53. 53. 完成
  54. 54. 可視化: 統合失調症は外来患者数が多く、性差も⼤きい
  55. 55. おまけ: 演算⼦と論理式
  56. 56. 演算⼦のバリエーション • A > B: AはBより⼤きい • A >= B: AはBと等しいかそれより⼤きい • A <= B: AはBと等しいかそれより⼩さい • A != B: AはBと等しくない • A == B: AとBは等しい
  57. 57. 演算⼦を⽤いる時の注意点 ## どちらも、2.00..., 1.00...となるため sqrt(2)^2 == 2 # FALSE 1/49 * 49 == 1 # FALSE • ⼀度計算を挟んでしまうと、FALSEになってしまう ## near()を使うと解決する near(Sqrt(2)^2, 2) # TRUE near(1/49 * 49, 1) # TRUE
  58. 58. 論理式を書くときの注意点 • 基本的には、「左の条件に適合する」もののうち、 「右の条件にも適合する」もの、となる x y !x & y x & y x & !y x xor(x, y) y x or y
  59. 59. Data Transformation with dplyr. • コア関数 ⎻ slice(): ⾏抽出 ⎻ filter(): (列の値で)⾏抽出 ⎻ select(): 列抽出 ⎻ arrange(): 並び替え ⎻ summarize(): 関数の⼀括適⽤ データの整形、加⼯を効率良くやる関数が豊富 他にも、distinct(), sample_flac(), count...etc Rstudioチーとシート(https://www.rstudio.com/resources/cheatsheets/)
  60. 60. 複数のデータセットを結合したい A病院 B病院 C病院
  61. 61. 複数のデータセットを結合したい 2006年 2010年 2014年
  62. 62. join() • 複数のデータフレームを結合する
  63. 63. 結合するデータセット間に共通の紐付けKeyをもとに データを結合する。 x ID value 1 x1 2 x2 3 x3 y ID value 1 y1 2 y2 4 y4 x_y ID value_x value_y 1 x1 y1 2 x2 y2 紐付けkeyのIDをもとにすると、データフレームyには ID 3, 4のデータがないので、無視される。 Inner join
  64. 64. Left join x ID value 1 x1 2 x2 3 x3 y ID value 1 y1 2 y2 4 y4 x_y ID value_x value_y 1 x1 y1 2 x2 y2 3 x3 NA ID3: データフレームxにはあるがyにはない ⇨ ⽋測 ID4: データフレームyにはあるがxにはない ⇨ 無視 左のデータセットにある値を紐付けKeyとして、右の データセットをくっつける。
  65. 65. x ID value 1 x1 2 x2 3 x3 y ID value 1 y1 2 y2 4 y4 x_y ID value_x value_y 1 x1 y1 2 x2 y2 4 NA y4 ID3: データフレームxにはあるがyにはない ⇨ 無視 ID4: データフレームyにはあるがxにはない ⇨ ⽋測 Right join 右のデータセットにある値を紐付けKeyとして、右の データセットをくっつける。
  66. 66. Full join x ID value 1 x1 2 x2 3 x3 y ID value 1 y1 2 y2 4 y4 x_y ID value_x value_y 1 x1 y1 2 x2 y2 3 x3 NA 4 NA y4 対応しないデータは⽋測扱いで残す 結合するデータセットにあるすべての⾏を結合する
  67. 67. 平成20, 23, 26年度のデータを結合する l これまで使ってきたデータ 平成26年度患者調査56: 精神科病院の推計患者数,年齢階級 × 性・疾病分類(精神及び⾏動の 障害) × ⼊院-外来別(https://www.e- stat.go.jp/SG1/estat/GL08020103.do?_toGL08020103_&listID=000001141596&reques tSender=dsearch) l これから結合するデータ ⎻ 平成23年度患者調査56: 精神科病院の推計患者数,年齢階級 × 性・疾病分 類(精神及び⾏動の障害) × ⼊院-外来別(https://www.e- stat.go.jp/SG1/estat/GL08020103.do?_toGL08020103_&listID=0000 01103073&requestSender=dsearch) ⎻ 平成20年度患者調査56: 精神科病院の推計患者数,年齢階級 × 性・疾病分 類(精神及び⾏動の障害) × ⼊院-外来別(https://www.e- stat.go.jp/SG1/estat/GL08020103.do?_toGL08020103_&listID=0000 01060228&requestSender=dsearch)
  68. 68. ## by= が結合するためのkey --- ## disease_name, age, sexの値で結合する --- join_data <- outpatient_26 %>% inner_join(outpatient_23, by = c(“disease_name” = "disease_name", "age” = "age", "sex” = "sex")) %>% inner_join(outpatient_20, by = c("disease_name” = "disease_name", "age” = "age", "sex” = "sex")) Inner_join() 本来、紐付けKeyは1つで良いのに、なぜ複数設定するのか?
  69. 69. 同じ値をもつ列が複数あるとややこしいデータになる x disease _name value 〇〇 x1 ×× x2 △△ x3 〇〇 x4 y disease _name value 〇〇 y1 ×× y2 〇〇 y3 x y disease _name Value_x Value_y 〇〇 x1 y1 〇〇 y1 y3 ×× x2 y2 〇〇 x4 y1 〇〇 x4 y3 紐付けKey列内に、同⼀の値を持つ要素があると、 対応するそれぞれの組み合わせを⽣成してしまう。
  70. 70. なんかちょっと違う “count.x”とか”count.y”とかがよく分からない
  71. 71. # outpatient20の⼀部の列を削除、countの列名を変更 --- outpatient_20 <- outpatient_20 %>% rename(year_20 = count) # outpatient23の⼀部の列を削除、countの列名を変更 --- outpatient_23 <- outpatient_23 %>% rename(year_23 = count) # outpatient26の⼀部の列を削除、countの列名を変更 --- outpatient_26 <- outpatient_26 %>% rename(year_26 = count) 各データセットの”count”列の名前を変更する
  72. 72. ## by= が結合するためのkey --- ## disease_name, age, sexの値で結合する --- join_data <- outpatient_26 %>% inner_join(outpatient_23, by = c("disease_name" = "disease_name", "age" = "age", "sex" = "sex")) %>% inner_join(outpatient_20,by = c("disease_name" = "disease_name", "age" = "age", "sex" = "sex")) %>% gather(year_26:year_20, key = year, value = "count", na.rm=T) 改めてinner_join(): ついでにロングデータにしておく
  73. 73. うまいこと結合できている
  74. 74. purrr()でコードを要約 & 可読性UP データの 読み込み 整然化 変形 可視化 モデル化プログラミング
  75. 75. 速くて読みやすい、コードの書く 関数を駆使して、なるべくコピペをしない!そのメリットは次の3点 l コードの⽬的をすぐに理解することができる l コードの修正が容易 l エラーが少なくなる
  76. 76. 例えばこんな時 気分障害の年齢別外来患者数が、調査 年度でどう変わるかしりたいなぁ
  77. 77. コピペして書く dep_20 <- join_data %>% filter(disease_name == "気分[感情]障害(躁うつ病を含む)", year == "year_20") %>% group_by(age) %>% summarize(mean = mean(count, na.rm = T)) dep_23 <- join_data %>% filter(disease_name == "気分[感情]障害(躁うつ病を含む)", year == "year_23") %>% group_by(age) %>% summarize(mean = mean(count, na.rm = T)) dep_26 <- join_data %>% filter(disease_name == "気分[感情]障害(躁うつ病を含む)", year == "year_26") %>% group_by(age) %>% summarize(mean = mean(count, na.rm = T))
  78. 78. 個別に可視化する 20年度 23年度 26年度 • (年度でそんなに違わないこと も)分かる • でも疾患ごとグラフ化しよう とすると急に⼤変に。。。
  79. 79. temp <- join_data %>% group_by(disease_name, age, year) %>% summarize(mean = mean(count, na.rm=T)) コピペをせずに、dplyrを駆使して⼀気にやる 3年分をまとめたデータについて、 疾患ごと、年齢ごと、年度ごとに男⼥の平均を算出する 各疾患の年齢別外来患者数が、調査 年度でどう変わるかしりたいなぁ
  80. 80. まとめて可視化、facet_wrap()で疾患別・年度別にする • すべてのグラフが1つにまとまってしまうので、⼤変みづらい
  81. 81. これまで⽅法では・・・ • コピペで書く ⎻ 個別のデータセットになるので綺麗にグラフ 化できるけど、分析対象が増えると⾯倒。 • dplyrで⼀気に書く ⎻ 分析対象が増えても⼿間は同じだけど、1つ1 つのdデータが⾒にくくなる。 どっちも避けたい!!!!
  82. 82. ⽬的: コピペせずに解析結果を⾒やすくしたい • ⼀気に処理できるコードを書く ⎻ コピペしなくて済む ⦁ データセットを個別にする ⎻ グラフが⾒やすくなる purrrによる⼀括処理 & リスト型化
  83. 83. リスト型とは • 様々な構造を持つ個別のデータを1つにまとめたもの $ 統合失調症 $ 気分障害 ・ ・ ・ 「疾患ごと・年度ごと」に個別の データセットにした上で、1つの オブジェクトにできる disease _name sex age count disease _name sex age count
  84. 84. purrr:: map() temp <- join_data %>% ## “disease_name”列と”year”列の値ごとにリスト型化する --- ## %>%を使うと、「.」で変数名を省略できる --- split(list(.$disease_name, .$year)) %>% ## map(): リストに関数をまとめて適⽤する --- ## リスト内の各データを”age”列の値でグループ化 --- map(group_by, age) %>% ## リスト内の各データについて、 --- ## グループごとに”count”列の平均を算出 --- map(summarize, mean = mean(count, na.rm = T)) これでコピペの必要なし!
  85. 85. 例によって複雑なのでイメージ図 sex desease_name age count split group_by sex age count $ 統合失調症 $ 気分障害 sex age count sex age count $ 統合失調症 $ 気分障害 sex age count age mean $ 統合失調症 $ 気分障害 summarize age mean
  86. 86. データがどうなっているかを確認してみる 疾患ごと・年度ごとの データになっている 年齢ごとに外来患者数 の平均が並んでいる
  87. 87. リストの中から任意のデータセットを取り出す⽅法 • 最近のRstudioは検索候補(?)みたいなものを出してくれる
  88. 88. 20年度調査における統合失調症の外来患者数 temp$`統合失調症,統合失調症型障害及び妄想性障害.year_20` %>% ggplot() + geom_bar(aes(x = age, y = mean), stat = "identity") + theme_set(theme_gray(base_family = "Hiragino Kaku Gothic Pro W3"))+ scale_y_continuous(expand = c(0,0))
  89. 89. 解析もリスト化できる どうせならグラフもリスト化して すぐ取り出せるようにしたいなぁ
  90. 90. 可視化したグラフもリストにいれたい ## 可視化のための関数を⾃作する --- ## 先ほどまで使っていたggplot()の関数をデータだけ⼊れれば描けるように関数化 --- geo_hist <- function(data){ ggplot(data) + geom_bar(aes(x = age, y = mean), stat = "identity") + theme_set(theme_gray(base_family = "Hiragino Kaku Gothic Pro W3")) + scale_y_continuous(expand = c(0,0)) } temp <- join_data %>% split(list(.$disease_name, .$year)) %>% map(group_by, age) %>% map(summarize, mean = mean(count, na.rm = T)) %>% map(geo_hist) ## リスト内の各データに⾃作した関数を適⽤ ---
  91. 91. 任意のグラフを簡単に取り出せる 「26年度調査のアルコール依 存症のデータ」が⾒たいなぁ
  92. 92. 解析もリスト化できる 疾患ごとにいろいろ分析したいけど、結 果が膨⼤になりそうだなぁ コピペするのはめんどくさい・・・
  93. 93. 例えばこんなデータ • 横軸: 20年度調査における気分障害 の平均外来患者数(年齢ごと) • 縦軸: 26年度調査における各疾患の 平均外来患者数(年齢ごと) 疾患によって、気分障害の外来 患者数との関連は異なりそう
  94. 94. こんな⾵に回帰直線が引けるかも?
  95. 95. 疾患ごとに回帰式を当てはめる outpatient_26 %>% ## 疾患ごとにリスト化する --- split(.$disease_name) %>% ## 26年度の外来患者数を20年度の気分障害の外来患者数で回帰 --- ## lm()は回帰分析を⾏う関数 lm(従属変数 ~ 独⽴変数) --- map(~lm(count ~ dep, data = .)) %>% ## 解析結果をまとめる --- ## 分散説明率や係数などを素敵なリストにまとめてくれる --- map(summary) %>% ## まとめの中から、係数に関するところを抽出 --- map("coefficients")
  96. 96. 疾患ごとに回帰式を当てはめる 気分障害の外来患者数は、 6年後の統合失調症の外来 患者数を予測する
  97. 97. map()の仲間たち 返り値を調整する系 • map_lg() : factor型 • map_chr() : character型 • map_int() : integer型 • map_dbl() : double型 複数リストに適⽤する系 • map2() : 引数に2つのリスト • map3() : 引数に3つのリスト • map_n() : 引数に3つ以上のリスト どれだけ複雑なデータセット にも対応可能!
  98. 98. まとめ 整然化 変形 プログラミング filter(), mutate(), group_by(), summarize()et....etc: データセットの必要部分を抽出、結合、要約 join(): 複数データセットの結合 map(): 効率よく、ミスの少ないコーディング
  99. 99. Enjoy Data Handling !!

×