Slide 1

Slide 1 text

66th Tokyo.R @࿡ຊ໦ 初心者セッション2 - データ処理編 - @kilometer

Slide 2

Slide 2 text

Whoʂʁ 誰だ?

Slide 3

Slide 3 text

Whoʂʁ ໊લɿ @kilometer ৬ۀɿ ϙευΫ(޻ֶത࢜) ઐ໳ɿ ߦಈηϯαϦϯά ɹ ਆܦΠϝʔδϯά ҩ༻γεςϜ޻ֶ Rྺɿ म࢜ͷࠒ͔Β10೥͙Β͍ɻ ྲྀߦ:ɹ࿨෩ϋϯόʔά

Slide 4

Slide 4 text

Tokyo.R 初心者セッション ॳ৺ऀ͕தڃऀʹͳΔͨΊͷٕज़ ஌ΔͱḿΔٕज़ͷجૅ ࣗ༝ʹͳΔͨΊͷಓ۩ͱߟ͑ํ ʹ

Slide 5

Slide 5 text

ߟ͑Δ ॻ͘ ࣮ߦ͢Δ プログラミング ಡΉ

Slide 6

Slide 6 text

࣮ߦ͢Δ https://www.amazon.co.jp/dp/B00Y0UI990/

Slide 7

Slide 7 text

ಓ۩ʢݴޠΛؚΉʣ͸ɺࢥߟΛ཯͢Δɻ ࢥߟ͸ɺಓ۩ʢݴޠΛؚΉʣΛ཯͢Δɻ

Slide 8

Slide 8 text

ߟ͑Δ ॻ͘ 捗るプログラミング ಡΉ ߴ͍ࣗ༝౓Ͱ ετϨεͳ͘ γʔϜϨεʹ

Slide 9

Slide 9 text

自由なデータ処理 in R ύΠϓԋࢉࢠ verbؔ਺܈

Slide 10

Slide 10 text

ԋࢉࢠ− ݞ׳Β͠ − ʮRͷԋࢉࢠಛूʯy__mattu https://ymattu.github.io/JapanR2017/slide.html#/ ୅ೖԋࢉࢠ ϒʔϧԋࢉࢠ

Slide 11

Slide 11 text

ԋࢉࢠ− ݞ׳Β͠ − ୅ೖԋࢉࢠ A <- B A <<- B # ୅ೖԋࢉࢠ # Ӭଓ୅ೖԋࢉࢠ

Slide 12

Slide 12 text

ԋࢉࢠ− ݞ׳Β͠ − ୅ೖԋࢉࢠ ex_func <- function(){ x <- 600 x <<- 100 ptint(x) } # άϩʔόϧม਺ # ϩʔΧϧม਺ ʮRͷԋࢉࢠಛूʯy__mattu https://ymattu.github.io/JapanR2017/slide.html#/

Slide 13

Slide 13 text

ԋࢉࢠ− ݞ׳Β͠ − ୅ೖԋࢉࢠ ex_func [1] 600 x [1] 100

Slide 14

Slide 14 text

ԋࢉࢠ− ݞ׳Β͠ − ୅ೖԋࢉࢠ ex_func [1] 600 x [1] 100 ex_func <- function(){ x <- 600 x <<- 100 ptint(x) }

Slide 15

Slide 15 text

ԋࢉࢠ− ݞ׳Β͠ − ϒʔϧԋࢉࢠ Boolean Algebra A == B A != B A | B A & B A %in% B # equal to # not equal to # or # and # is A in B? https://www.amazon.co.jp/dp/0486600289

Slide 16

Slide 16 text

ύΠϓԋࢉࢠ X %>% f X %>% f(y) X %>% f %>% g X %>% f(y, .) f(X) f(X, y) g(f(X)) f(y, X) %>% {magrittr} ʮdplyr࠶ೖ໳ʢجຊฤʣʯyutanihilation https://speakerdeck.com/yutannihilation/dplyrzai-ru-men-ji-ben-bian

Slide 17

Slide 17 text

ύΠϓԋࢉࢠ%>% {magrittr} ʮ࠷ۙύΠϓ͔͠ଧͬͯͳ͍Ͱ͢ʯ ʮύΠϓɺ͋Ε͸͍͍Αͳͬͯ ɹଞͷݴޠͷਓ΋օΜͳࢥͬͯ·͢Αʯ ʮ1೥͙Β͍͔͚ͯΏͬ͘Γͬͪ͜ ɹʢύΠϓʣʹγϑτ͠·ͨ͠Ͷʯ ʲதಟ Ѫ༻ऀͨͪͷ੠ʳ ʮRίϛϡχςΟ࢛ํࢁ࿩ʯhttps://rlangradio.org/

Slide 18

Slide 18 text

ύΠϓԋࢉࢠ%>% {magrittr} dat1 <- f1(dat0, var1) # ͦΕͱ΋͜͏ॻ͖·͔͢ʁ dat2 <- f2(dat1, var2) dat3 <- f3(dat2, var3) # ͜͏ॻ͖·͔͢ʁ dat <- f3(f2(f1(dat0, var1), var2), var3)

Slide 19

Slide 19 text

ύΠϓԋࢉࢠ%>% {magrittr} # ͑ʁ͜͏ॻ͖·͢ʁ dat <- f3(f2(f1(dat0, var1), var2), var3) ೖޱ ग़ޱ ᶃ ᶄ ᶅ ࢥߟͷྲྀΕ ߏ଄ͷରԠ

Slide 20

Slide 20 text

ύΠϓԋࢉࢠ%>% {magrittr} # ͋ΕΕɺ͜͏ॻ͘ΜͰ͔͢ʁ dat <- f3(f2(f1(dat0, var1), var2), var3) ೖޱ ग़ޱ ࢥߟͷྲྀΕ ղಡͷྲྀΕ

Slide 21

Slide 21 text

ύΠϓԋࢉࢠ%>% {magrittr} # ຊ౰ʹɺ͜͏ॻ͖·͔͢ʁ dat <- f6(f5(f4(f3(f2(f1(dat0, var1-1, var1-2), var2), var3), var4-1, var4-2, var4-3), var5), var6) ೖޱ ग़ޱ ࢥߟͷྲྀΕ ߏ଄ͷରԠ

Slide 22

Slide 22 text

ύΠϓԋࢉࢠ%>% {magrittr} # ϚδͰɺ͜͏ॻ͖·͔͢ʁ dat <- f6(f5(f4(f3(f2(f1(dat0, var1-1, var1-2), var2), var3), var4-1, var4-2, var4-3), var5), var6) ೖޱ ग़ޱ ࢥߟͷྲྀΕ ղಡͷྲྀΕ

Slide 23

Slide 23 text

ύΠϓԋࢉࢠ%>% {magrittr} # ͜ɺ͜͏ॻ͖·͔͢ʁ dat <- f6(f5(f4(var4-1, f3(f2(f1(dat0, var1-1, var1-2), var2), var3-2), var4-2, var4-3), var5), var6)

Slide 24

Slide 24 text

ύΠϓԋࢉࢠ%>% {magrittr} # ͱͳΔͱɺ͜͏ॻ͖·͔͢ʁ ೖޱ ग़ޱ dat1 <- f1(dat0, var1) dat2 <- f2(dat1, var2) dat3 <- f3(dat2, var3) ᶃ ᶄ ᶅ ೖޱ ग़ޱ ೖޱ ग़ޱ ࢥߟͷྲྀΕ ղಡͷྲྀΕ

Slide 25

Slide 25 text

ύΠϓԋࢉࢠ%>% {magrittr} # ͏ʔΜɺ͜͏ॻ͖·͔͢ʁ ਅͷೖޱ Ծͷग़ޱ dat1 <- f1(dat0, var1) dat2 <- f2(dat1, var2) dat3 <- f3(dat2, var3) ᶃ ᶄ ᶅ Ծͷೖޱ Ծͷग़ޱ Ծͷೖޱ ਅͷग़ޱ ࢥߟͷྲྀΕ ղಡͷྲྀΕ

Slide 26

Slide 26 text

ύΠϓԋࢉࢠ%>% {magrittr} # ͛͛͛ɺ͜͏ॻ͖·͔͢ʁ ਅͷೖޱ dat1 <- f1(dat0, var1-1, var1-2) dat2 <- f2(dat1, var2) dat3 <- f3(dat2, var3) dat4 <- f4(var4-1, dat3, var4-2) dat5 <- f5(dat4, var5) dat6 <- f6(dat5, var6) ਅͷग़ޱ ࢥߟͷྲྀΕ ղಡͷྲྀΕ

Slide 27

Slide 27 text

ύΠϓԋࢉࢠ%>% {magrittr} # ύΠϓ೴ͷώτͳΒ͜͏ॻ͖·͢ɻ dat0 %>% f1(var1-1, var1-2) %>% f2(var2) %>% f3(var3) %>% f4(var4-1, ., var4-2) %>% f5(var5) %>% f6(var6) -> dat ೖޱ ग़ޱ

Slide 28

Slide 28 text

ύΠϓԋࢉࢠ%>% {magrittr} # ͜͏΍ͬͯॻ͘ࣄ΋Ͱ͖·͢ɻ dat <- dat0 %>% f1(var1-1, var1-2) %>% f2(var2) %>% f3(var3) %>% f4(var4-1, ., var4-2) %>% f5(var5) %>% f6(var6) ೖޱ ग़ޱ

Slide 29

Slide 29 text

ύΠϓԋࢉࢠ%>% {magrittr} # ͜͏΍ͬͯॻ͘ࣄ΋Ͱ͖·͢ɻ dat <- dat0 %>% f1(var1-1, var1-2) %>% f2(var2) %>% f3(var3) %>% f4(var4-1, ., var4-2) %>% f5(var5) %>% f6(var6) ೖޱ ग़ޱ υοτ͕͋Δ

Slide 30

Slide 30 text

ύΠϓԋࢉࢠ X %>% f X %>% f(y) X %>% f %>% g X %>% f(y, .) f(X) f(X, y) g(f(X)) f(y, X) %>% {magrittr} ͜Ε

Slide 31

Slide 31 text

ύΠϓԋࢉࢠ%>% {magrittr} dat <- iris %>% .[, 1:3] %>% prcomp iris %>% .[, 1:3] %>% prcomp -> dat “डಈଶ”ͬΆ͍ “ೳಈଶ”ͬΆ͍ B͸A͕F͞Εͨ΋ͷ AΛF͢ΔͱBʹͳΔ

Slide 32

Slide 32 text

ύΠϓԋࢉࢠ%>% {magrittr} library(magrittr) iris %>% str 'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 ... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 ... $ Species : Factor w/ 3 levels "setosa", ... str(iris)

Slide 33

Slide 33 text

ύΠϓԋࢉࢠ%>% {magrittr} library(magrittr) iris %>% cbind(a = 1:150) %>% str 'data.frame': 150 obs. of 6 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 ... $ Species : Factor w/ 3 levels "setosa", ... $ a : int 1 2 3 4 5 6 7 8 9 10 ...

Slide 34

Slide 34 text

ύΠϓԋࢉࢠ%>% {magrittr} library(magrittr) iris %>% .[, 1:3] %>% prcomp %>% str List of 5 $ sdev : num [1:3] 1.921 0.491 0.244 $ rotation: num [1:3, 1:3] 0.39 -0.091 ... ..- attr(*, "dimnames")=List of 2 .. ..$ : chr [1:3] "Sepal.Length" "Sepal.Width" ... .. ..$ : chr [1:3] "PC1" "PC2" "PC3" $ center : Named num [1:3] 5.84 3.06 3.76 ..- attr(*, "names")= chr [1:3] "Sepal.Length" ... $ scale : logi FALSE $ x : num [1:150, 1:3] -2.49 -2.52 -2.71 -2.56 ...

Slide 35

Slide 35 text

ύΠϓԋࢉࢠ%>% {magrittr} library(magrittr) dat <- iris %>% .[, 1:3] %>% prcomp %>% .$x %>% data.frame %T>% plot dat <- iris[, 1:3] dat <- prcomp(dat) dat <- dat$x dat <- data.frame(dat) plot(dat) teeԋࢉࢠ ʮ෭࡞༻Λڐ͠ͳ͕Β΋chain͍ͯ͘͠ʯdichika http://d.hatena.ne.jp/dichika/20140731/p1

Slide 36

Slide 36 text

ߟ͑Δ ॻ͘ 捗るプログラミング ಡΉ ߴ͍ࣗ༝౓Ͱ ετϨεͳ͘ Sequentialʹ γʔϜϨεʹ

Slide 37

Slide 37 text

verbؔ਺܈ ύΠϓԋࢉࢠ %>% 自由なデータ処理 in R

Slide 38

Slide 38 text

mutate select filter arrange summaries join # ΧϥϜͷ௥Ճ # ΧϥϜͷબ୒ # ߦͷߜΓࠐΈ # ߦͷฒͼସ͑ # ஋ͷू໿ # ߦྻͷ݁߹ {dplyr} WFSCT WFSCؔ਺܈

Slide 39

Slide 39 text

It (dplyr) provides simple “verbs” to help you translate your thoughts into code. functions that correspond to the most common data manipulation tasks Introduction to dplyr https://cran.r-project.org/web/packages/dplyr/vignettes/dplyr.html WFSCT {dplyr}

Slide 40

Slide 40 text

dplyr͸ɺ͋ͳͨͷߟ͑Λίʔυʹ຋༁ ͢ΔͨΊͷʲಈࢺʳΛఏڙ͢Δɻ σʔλૢ࡞ʹ͓͚ΔجຊͷΩ Λɺɹɹɹγϯϓϧʹ࣮ߦͰ͖Δؔ਺ (܈) Introduction to dplyr https://cran.r-project.org/web/packages/dplyr/vignettes/dplyr.html WFSCT {dplyr} ※ ͔ͳΓҙ༁

Slide 41

Slide 41 text

WFSCT S V O C M ؔ਺ ΦϒδΣΫτ ֤छҾ਺ ͦΕҎ֎ͷએݴ (෼ذ, ܁ฦ, etc) ※ ΠϝʔδͰ͢

Slide 42

Slide 42 text

WFSCT S V O C M ※ ΠϝʔδͰ͢ ಈࢺʴಈࢺʹ཯͞Εͨम০ޠ {dplyr}ͷverbؔ਺

Slide 43

Slide 43 text

WFSCT {dplyr} By constraining your options, it helps you think about your data manipulation challenges. Introduction to dplyr https://cran.r-project.org/web/packages/dplyr/vignettes/dplyr.html

Slide 44

Slide 44 text

WFSCT {dplyr} બ୒ࢶΛ制限͢Δ͜ͱͰɺ σʔλղੳͷεςοϓΛ γϯϓϧʹߟ͑ΒΕ·͢Ϥɻ ʢΊͬͪΌҙ༁ʣ Introduction to dplyr https://cran.r-project.org/web/packages/dplyr/vignettes/dplyr.html ※ ·͞ʹҙ༁

Slide 45

Slide 45 text

ΑΓଟ͘ͷ੍໿Λ՝͢ࣄͰɺ ࠢͷ଍ᐫ͔ΒɺΑΓࣗ༝ʹͳΔɻ Igor Stravinsky И́горь Ф Страви́нский The more constraints one imposes, the more one frees one's self of the chains that shackle the spirit. 1882 - 1971 ※ ׂͱҙ༁

Slide 46

Slide 46 text

ߟ͑Δ ॻ͘ 捗るプログラミング ಡΉ ߴ͍ࣗ༝౓Ͱ ετϨεͳ͘ Sequentialʹ γʔϜϨεʹ

Slide 47

Slide 47 text

mutate select filter arrange summaries join # ΧϥϜͷ௥Ճ # ΧϥϜͷબ୒ # ߦͷߜΓࠐΈ # ߦͷฒͼସ͑ # ஋ͷू໿ # ߦྻͷ݁߹ {dplyr} WFSCT WFSCؔ਺܈

Slide 48

Slide 48 text

֬ೝ ΧϥϜ ʢvariablesʣ ߦ ʢobservationsʣ

Slide 49

Slide 49 text

mutate select filter arrange summaries join # ΧϥϜͷ௥Ճ # ΧϥϜͷબ୒ # ߦͷߜΓࠐΈ # ߦͷฒͼସ͑ # ஋ͷू໿ # ߦྻͷ݁߹ {dplyr} WFSCT WFSCؔ਺܈

Slide 50

Slide 50 text

WFSCT {dplyr} mutate # ΧϥϜͷ௥Ճ + mutate

Slide 51

Slide 51 text

library(dplyr) iris %>% mutate(a = 1:nrow(.)) %>% str 'data.frame': 150 obs. of 6 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 ... $ Species : Factor w/ 3 levels "setosa", ... $ a : int 1 2 3 4 5 6 7 8 9 10 ... WFSCT {dplyr}

Slide 52

Slide 52 text

library(dplyr) iris %>% mutate(a = 1:nrow(.), a = a * 5/3 %>% round) 'data.frame': 150 obs. of 6 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 ... $ Species : Factor w/ 3 levels “setosa”, ... $ a : num 1.67 3.33 5 6.67 8.33 ... ... WFSCT {dplyr} ্ॻ͖͞ΕΔ

Slide 53

Slide 53 text

WFSCT {dplyr} select # ΧϥϜͷબ୒ select

Slide 54

Slide 54 text

library(dplyr) iris %>% select(Sepal.Length, Sepal.Width) 'data.frame': 150 obs. of 6 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 ... WFSCT {dplyr}

Slide 55

Slide 55 text

library(dplyr) iris %>% select(contains(“Width”)) 'data.frame': 150 obs. of 6 variables: $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 ... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 ... WFSCT {dplyr} Select helpؔ਺

Slide 56

Slide 56 text

WFSCT {dplyr} # Select helpؔ਺܈ starts_with("s") ends_with("s") contains("se") matches("^.e") one_of(c("Sepal.Length", "Species")) everything() https://kazutan.github.io/blog/2017/04/dplyr-select-memo/ ʮdplyr::selectͷ׆༻ྫϝϞʯkazutan

Slide 57

Slide 57 text

mutate select filter arrange summaries join # ΧϥϜͷ௥Ճ # ΧϥϜͷબ୒ # ߦͷߜΓࠐΈ # ߦͷฒͼସ͑ # ஋ͷू໿ # ߦྻͷ݁߹ {dplyr} WFSCT WFSCؔ਺܈

Slide 58

Slide 58 text

WFSCT {dplyr} filter # ߦͷߜΓࠐΈ filter

Slide 59

Slide 59 text

library(dplyr) iris %>% filter(Species == "versicolor") WFSCT {dplyr} 'data.frame': 50 obs. of 5 variables: $ Sepal.Length: num 7 6.4 6.9 5.5 6.5 5.7 6.3 ... $ Sepal.Width : num 3.2 3.2 3.1 2.3 2.8 2.8 ... $ Petal.Length: num 4.7 4.5 4.9 4 4.6 4.5 4.7 ... $ Petal.Width : num 1.4 1.5 1.5 1.3 1.5 1.3 ... $ Species : Factor w/ 3 levels "setosa","versicolor",..: 2 2 2 2 2 2 2 2 2 2 ...

Slide 60

Slide 60 text

library(dplyr) iris %>% filter(Species == "versicolor") WFSCT {dplyr} NSE (Non-Standard Evaluation) 'data.frame': 50 obs. of 5 variables: $ Sepal.Length: num 7 6.4 6.9 5.5 6.5 5.7 6.3 ... $ Sepal.Width : num 3.2 3.2 3.1 2.3 2.8 2.8 ... $ Petal.Length: num 4.7 4.5 4.9 4 4.6 4.5 4.7 ... $ Petal.Width : num 1.4 1.5 1.5 1.3 1.5 1.3 ... $ Species : Factor w/ 3 levels "setosa","versicolor",..: 2 2 2 2 2 2 2 2 2 2 ...

Slide 61

Slide 61 text

filter(df, x == "a", y == 1) /4&ͷ࿩ NSE (Non-Standard Evaluation) df[df$x == "a" & df$y == 1, ] SE (Standard Evaluation) http://dplyr.tidyverse.org/articles/programming.html Programming with dplyr

Slide 62

Slide 62 text

filter(df, x == "a", y == 1) /4&ͷ࿩ NSEΛ࢖͏ͱɺ ɾdfͷ໊લΛԿճ΋ॻ͔ͳ͍͍ͯ͘Αɻ ɾSQLʹ຋༁͢Δ࣌ʹָͩΑɻ http://dplyr.tidyverse.org/articles/programming.html Programming with dplyr df[df$x == "a" & df$y == 1, ]

Slide 63

Slide 63 text

filter(df, x == "a", y == 1) /4&ͷ࿩ NSEΛ࢖͏ͱɺ ɾdfͷ໊લΛԿճ΋ॻ͔ͳ͍͍ͯ͘Αɻ ɾSQLʹ຋༁͢Δ࣌ʹָͩΑɻ ɹɹ http://dplyr.tidyverse.org/articles/programming.html Programming with dplyr ৭ʑ͋Δ͚ͲεοΩϦ͍ͯ͠Δͷ͸ਖ਼ٛ (ࢲݟ) df[df$x == "a" & df$y == 1, ]

Slide 64

Slide 64 text

filter(df, x == "a", y == 1) /4&ͷ࿩ NSEΛ࢖͏ͱɺ df[df$x == "a" & df$y == 1, ] http://dplyr.tidyverse.org/articles/programming.html Programming with dplyr ৭ʑ͋Δ͚ͲεοΩϦ͍ͯ͠Δͷ͸ਖ਼ٛ (ࢲݟ) ॻ͖΍͘͢ɺಡΈ΍͘͢ɻ ࢥߟͱ࣮૷ͷڑ཭Λۙ͘ɻ # ಈࢺత # ໊ࢺత

Slide 65

Slide 65 text

df <- data.frame(x = 1:3, y = 1:3) filter(df, x == 1) /4&ͷ࿩ NSEΛ࠾༻͍ͯ͠ΔͷͰɺ http://dplyr.tidyverse.org/articles/programming.html Programming with dplyr my_var <- "x" filter(df, my_var == 1) ͜Εɹ͕ಈ͔ͳ͍ɻ dfͷmy_varΧϥϜΛ୳͠ʹߦ͘

Slide 66

Slide 66 text

/4&ͷ࿩ my_var <- quo(x) filter(df, (!! my_var) == 1) Ͳʙʙʙͯ͠΋΍Γ͚ͨΕ͹ɺ Կނ͜͏ͳΔ͔͸ɺ ɹʮdplyr࠶ೖ໳ʢTidyvalฤʣʯΛࢀরɻ https://speakerdeck.com/yutannihilation/dplyrzai-ru-men-tidyevalbian ʮdplyr࠶ೖ໳ʢTidyvalฤʣʯyutanihilation

Slide 67

Slide 67 text

/4&ͷ࿩ my_var <- quo(x) filter(df, (!! my_var) == 1) Ͳʙʙʙͯ͠΋΍Γ͚ͨΕ͹ɺ Կނ͜͏ͳΔ͔͸ɺ ɹʮdplyr࠶ೖ໳ʢTidyvalฤʣʯΛࢀরɻ https://speakerdeck.com/yutannihilation/dplyrzai-ru-men-tidyevalbian Մಡੑ্͕͕ΔʁԼ͕Δʁ ͦΕ͸ɺ͋ͳͨͱಡΈख࣍ୈɻ ʮdplyr࠶ೖ໳ʢTidyvalฤʣʯyutanihilation

Slide 68

Slide 68 text

mutate select filter arrange summaries join # ΧϥϜͷ௥Ճ # ΧϥϜͷબ୒ # ߦͷߜΓࠐΈ # ߦͷฒͼସ͑ # ஋ͷू໿ # ߦྻͷ݁߹ {dplyr} WFSCT WFSCؔ਺܈

Slide 69

Slide 69 text

WFSCT {dplyr} join # ߦྻͷ݁߹ xxx_join関数群 left_join, right_join inner_join, semi_join full_join anti_join

Slide 70

Slide 70 text

a <- data.frame(x1 = c(1,2,3), x2 = 10:12) b <- data.frame(x1 = c(1,3,5), x3 = 100:102) WFSCT {dplyr} > left_join(a, b) > right_join(a, b) x1 x2 x3 1 10 100 2 11 NA 3 12 101 x1 x2 x3 1 10 100 3 12 101 5 NA 102 join # ߦྻͷ݁߹

Slide 71

Slide 71 text

WFSCT {dplyr} > inner_join(a, b) > semi_join(a, b) x1 x2 x3 1 10 100 3 12 101 x1 x2 1 10 3 12 join # ߦྻͷ݁߹ a <- data.frame(x1 = c(1,2,3), x2 = 10:12) b <- data.frame(x1 = c(1,3,5), x3 = 100:102)

Slide 72

Slide 72 text

WFSCT {dplyr} > anti_join(a, b) x1 x2 2 11 join # ߦྻͷ݁߹ a <- data.frame(x1 = c(1,2,3), x2 = 10:12) b <- data.frame(x1 = c(1,3,5), x3 = 100:102) > full_join(a, b) x1 x2 x3 1 10 100 2 11 NA 3 12 101 5 NA 102

Slide 73

Slide 73 text

WFSCT {dplyr} https://twitter.com/yutannihilation/status/551572539697143808 join # ߦྻͷ݁߹

Slide 74

Slide 74 text

ύΠϓԋࢉࢠ %>% verbؔ਺܈ mutate, select, filter, arrange, summaries, join 自由なデータ処理 in R

Slide 75

Slide 75 text

https://www.tidyverse.org/

Slide 76

Slide 76 text

ߟ͑Δ ॻ͘ 捗るプログラミング ಡΉ ߴ͍ࣗ༝౓Ͱ ετϨεͳ͘ Sequentialʹ γʔϜϨεʹ

Slide 77

Slide 77 text

No content