通称: 「宇宙本」
install.packages()
でインストールreadr パッケージの read_csv 関数を使いたいとき
# 方法 1
library(readr)
dat <- read_csv("hoge.csv")
# 方法 2
dat <- readr::read_csv("hoge.csv")
ざっくり:
install.packages("tidyverse")
でインストールlibrary(tidyverse)
── Attaching packages ────────────────────────────────────────────── tidyverse 1.2.1 ──
✔ ggplot2 3.1.0 ✔ purrr 0.3.0
✔ tibble 2.0.1 ✔ dplyr 0.8.0.1
✔ tidyr 0.8.3 ✔ stringr 1.4.0
✔ readr 1.3.1 ✔ forcats 0.3.0
── Conflicts ───────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
読み込まれるパッケージ
パッケージを使わないやり方より
The dplyr package makes these steps fast and easy: - … - It provides simple “verbs”, functions that correspond to the most common data manipulation tasks, to help you translate your thoughts into code. - …
https://cran.r-project.org/web/packages/dplyr/vignettes/dplyr.html
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
は必須