準備

library(dplyr)  # ライブラリの読み込み
head(iris)  # データの確認
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

行(レコード)の絞り込み

filter(data, 条件)

dat.filter <- filter(iris, Species == "setosa")
head(dat.filter)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

行(レコード)の並び替え

arrange(data, 指定列) :昇順
arrange(data, desc(指定列)) :降順

dat.arr <- arrange(iris, Sepal.Length)
head(dat.arr)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          4.3         3.0          1.1         0.1  setosa
## 2          4.4         2.9          1.4         0.2  setosa
## 3          4.4         3.0          1.3         0.2  setosa
## 4          4.4         3.2          1.3         0.2  setosa
## 5          4.5         2.3          1.3         0.3  setosa
## 6          4.6         3.1          1.5         0.2  setosa

列の選択

select(dat, 条件)

条件

  • starts_with(x) 列名がxで始まる列を取得
  • end_with(x) 列名がxでo終わる列を取得
  • contains(x) xが含まれる列を取得
iris.select <- select(iris, starts_with("Sepal"))
head(iris.select)
##   Sepal.Length Sepal.Width
## 1          5.1         3.5
## 2          4.9         3.0
## 3          4.7         3.2
## 4          4.6         3.1
## 5          5.0         3.6
## 6          5.4         3.9

列の追加

mutate(dat, 追加する列)

iris.mutate <- mutate(iris,
                      newColumn = ifelse(Sepal.Length > 5, 1, 0)
                      )
head(iris.mutate)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species newColumn
## 1          5.1         3.5          1.4         0.2  setosa         1
## 2          4.9         3.0          1.4         0.2  setosa         0
## 3          4.7         3.2          1.3         0.2  setosa         0
## 4          4.6         3.1          1.5         0.2  setosa         0
## 5          5.0         3.6          1.4         0.2  setosa         0
## 6          5.4         3.9          1.7         0.4  setosa         1

グループごとに関数を適用

group_by(data, グループ化する要素が入った列名)
summarise(data, 関数)

iris.Sp.group <- group_by(iris, Species)  # 列Speciesの要素でグループ化
summarise(iris.Sp.group,
          nSpecies = length(Species),
          meanSL = mean(Sepal.Length)
)
##   nSpecies   meanSL
## 1      150 5.843333

データセットの結合

準備

data.A <- data.frame(x = c("A", "B", "F"), y = 1:3)
data.B <- data.frame(x = c("A", "D", "E"), z = 4:6)
head(data.A)
##   x y
## 1 A 1
## 2 B 2
## 3 F 3
head(data.B)
##   x z
## 1 A 4
## 2 D 5
## 3 E 6

すべての行と列を結合

full_join(data, data, by = キー列)
該当するものがない場合は,NAが入る

full_join(data.A, data.B, by = "x")
##   x  y  z
## 1 A  1  4
## 2 B  2 NA
## 3 F  3 NA
## 4 D NA  5
## 5 E NA  6

共通する行と列を結合

inner_join(data, data, by = キー列)

inner_join(data.A, data.B, by = "x")
##   x y z
## 1 A 1 4

行を結合

bind_rows(data, data)
標準のrbind()と同じ、左のデータフレームに右のデータフレームを結合する

bind_rows(data.A, data.B)
##   x  y  z
## 1 A  1 NA
## 2 B  2 NA
## 3 F  3 NA
## 4 A NA  4
## 5 D NA  5
## 6 E NA  6

テーブルIDを変数として追加する

bind_rows(data.A, data.B, .id = "df_id")
##   df_id x  y  z
## 1     1 A  1 NA
## 2     1 B  2 NA
## 3     1 F  3 NA
## 4     2 A NA  4
## 5     2 D NA  5
## 6     2 E NA  6

別々の列に分割

準備

library(tidyr)  # ライブラリの読み込み
data.A$date <- c("2016-10", "2016-11", "2016-12")
head(data.A)
##   x y    date
## 1 A 1 2016-10
## 2 B 2 2016-11
## 3 F 3 2016-12

separate(data, col = 分ける列, into = c(分けられた列名, 分けられた列名) , sep = “分ける文字”)

separate(data.A, col = date, into = c("year", "month") , sep = "-")
##   x y year month
## 1 A 1 2016    10
## 2 B 2 2016    11
## 3 F 3 2016    12

「データから価値を創造する」一般社団法人データマーケティングラボラトリー

Copyright© DML All Rights Reserved.