GitHub → https://bit.ly/2z0sS3r
今日の内容の 8 割は「宇宙本」第 3 章に書いてあります。
ざっくり:
install.packages("tidyverse")
でインストールlibrary(tidyverse)
── Attaching packages ──────────────────────────────────────────────── tidyverse 1.2.1 ──
✔ ggplot2 3.1.0 ✔ purrr 0.2.5
✔ tibble 1.4.2 ✔ dplyr 0.7.8
✔ tidyr 0.8.0 ✔ stringr 1.3.1
✔ readr 1.1.1 ✔ forcats 0.3.0
── Conflicts ─────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
読み込まれるパッケージ
パッケージを使わないやり方より
git clone https://github.com/ymattu/sampledata_small
sales <- read_csv("sampledata_small/csv/Sales.csv")
product <- read_csv("sampledata_small/csv/Products.csv")
user_master <- read_csv("sampledata_small/csv/UserMaster.csv")
sales %>%
select(UserID) %>%
head()
1:3 %>%
sum()
[1] 6
# これと全く同じ
sum(1:3)
product %>%
select(starts_with("P")) %>%
head(4)
例
select(product, 1:3) # 列番号が連続している場合
select(product, ProductID:Price) # 列名でも連続していれば同様
select(product, -CreatedDate) # 特定の列を除く
select(product, -4) # 特定の列番号を除く
select(product, starts_with("p"), ignore.case = TRUE) # 大文字小文字を無視
select(product, matches("^(Product|Price)")) # "Product"または"Price"で始まる列を選択
product %>%
mutate(zeikomi = Price * 1.08) %>%
head(4)
user_master %>%
filter(Age >= 20, Sex == "F") # 年齢 20 歳以上の女性
sales %>%
group_by(UserID) %>%
summarise(buy_count = n())
$
はお手軽だしよく使います。$
で 1 列だけ取り出すproduct$Category %>%
unique()
[1] "雑貨・日用品" "花・グリーン"
[3] "食品" "衣料品"
[5] "ヘルス&ビューティー" "家具・インテリア・家電"
たくさんあるけど例えば
sales %>%
mutate(buy_year = year(Timestamp)) %>%
head()
ユーザー、年ごとに集計
sales %>%
mutate(buy_year = year(Timestamp)) %>%
group_by(UserID, buy_year) %>%
summarise(buy_count = n()) %>%
arrange(UserID) %>%
head()
inner_join()
inner_join(a, b, by = "x1")
left_join()
left_join(a, b, by = "x1")
full_join()
full_join(a, b, by = "x1")
anti_join()
anti_join(a, b, by = "x1")
例えばこんな感じ(a, b, c 3 つのデータ)
x1 x2
1 A 1
2 B 2
3 C 3
x1 x3
1 A TRUE
2 B FALSE
3 D TRUE
x1 x4
1 B 10
2 C 11
3 D 12
こうする…?
a %>%
full_join(b, by = "x1") %>%
full_join(c, by = "x1")
datlist <- list(a, b, c)
datlist %>%
purrr::reduce(~full_join(.x, .y, by = "x1"))
tidyverse
は必須