2015年6月29日月曜日

R:複数列のユニーク数をカウントする(重複除去してカウント)

【目的】 ユニーク数を数える(重複を除去して数える)
【方法】 n_distinct(v.x)
【補足】 library(dplyr)が必要

#テスト用データフレームを作成

v.x <- c(1,2,3,4)
v.x1 <- c("x","a","a","a")
v.x2 <- c("11","11","11","11")
df.x <- data.frame(id = v.x, name = v.x1, num = v.x2)

df.x

> df.x
  id name num
1  1    x  11
2  2    a  11
3  3    a  11
4  4    a  11
> 

df.x %>%
  summarize(id_u = n_distinct(id),name_u = n_distinct(name),num_u = n_distinct(num))

> df.x %>%
+   summarize(id_u = n_distinct(id),name_u = n_distinct(name),num_u = n_distinct(num))
  id_u name_u num_u
1    4      2     1

R ユニークデータを抽出する
http://mototeds.blogspot.jp/2015/07/r.html

2015年6月18日木曜日

R 内部結合(複数key)

【目的】 Rで複数キーの内部結合をする
【方法】 inner_join(df.x, df.y, by = c("key_1", "key_2"))
【補足】 library(dplyr)が必要

#テスト用データフレームを作成

v.x <- c(1,2,3,4)
v.x1 <- c("x","a","a","a")
v.x2 <- c("11","12","13","14")

v.y <- c(1,2,3,40)
v.y1 <- c("x","a","x","a")
v.y2 <- c("21","22","23","24")

df.x <- data.frame(id = v.x, name = v.x1, num = v.x2)
df.y <- data.frame(id = v.y, name = v.y1, num = v.y2)

> df.x
  id name num
1  1    x  11
2  2    a  12
3  3    a  13
4  4    a  14
> df.y
  id name num
1  1    x  21
2  2    a  22
3  3    x  23
4 40    a  24

#inner join
inner_join(df.x, df.y, by = c("id", "name")) 

> inner_join(df.x, df.y, by = c("id", "name"))
  id name num.x num.y
1  1    x    11    21
2  2    a    12    22

---他の結合---
R 内部結合(inner join)
R 内部結合(複数key)
R 外部結合(left join, right join)
R 完全外部結合(full join)
R アンチ結合(anti join)

---dplyrとは?---
R dplyrとはなんぞや?大規模データも簡単に処理? ~使い方~

R アンチ結合(anti join)

【目的】 Rでアンチ結合(anti join)を使う
【方法】 anti_join(df.x, df.y, by = "key")
【補足】 library(dplyr)が必要

#テスト用データフレームを作成

v.x <- c(1,2,3)
v.x1 <- c("a","b","c")

v.y <- c(1,2,30)
v.y1 <- c("A","B","C")

df.x <- data.frame(id = v.x, name = v.x1)
df.y <- data.frame(id = v.y, name = v.y1)

> df.x
  id name
1  1    a
2  2    b
3  3    c
> df.y
  id name
1  1    A
2  2    B
3 30    C

#anti join
anti_join(df.x, df.y, by = "id")

> anti_join(df.x, df.y, by = "id")
  id name
1  3    c

---他の結合---
R 内部結合(inner join)
R 内部結合(複数key)
R 外部結合(left join, right join)
R 完全外部結合(full join)
R アンチ結合(anti join)

---dplyrとは?---
R dplyrとはなんぞや?大規模データも簡単に処理? ~使い方~

R 完全外部結合(full join)

【目的】 Rで完全会部結合(full join)を使う
【方法】 full_join(df.x, df.y, by = "key")
【補足】 library(dplyr)が必要

# テスト用データフレームを作成
v.x <- c(1,2,3)
v.x1 <- c("a","b","c")
v.y <- c(1,2,30)
v.y1 <- c("A","B","C")
df.x <- data.frame(id = v.x, name = v.x1)
df.y <- data.frame(id = v.y, name = v.y1)

> df.x
  id name
1  1    a
2  2    b
3  3    c
> df.y
  id name
1  1    A
2  2    B
3 30    C

# full join
full_join(df.x, df.y, by = "id")

> full_join(df.x, df.y, by = "id")
  id name.x name.y
1  1      a      A
2  2      b      B
3  3      c   <NA>
4 30   <NA>      C

---他の結合---
R 内部結合(複数key)
R 外部結合(left join, right join)
R 完全外部結合(full join)
R アンチ結合(anti join)

---dplyrとは?---
R dplyrとはなんぞや?大規模データも簡単に処理? ~使い方~

R 外部結合(left join, right join)

【目的】 Rで外部結合(left join, right join)を使う
【方法】 left_join(df.x, df.y, by = "key")
【補足】 library(dplyr)が必要

#テスト用データフレームを作成

v.x <- c(1,2,3)
v.x1 <- c("a","b","c")

v.y <- c(1,2,30)
v.y1 <- c("A","B","C")

df.x <- data.frame(id = v.x, name = v.x1)
df.y <- data.frame(id = v.y, name = v.y1)

> df.x
  id name
1  1    a
2  2    b
3  3    c
> df.y
  id name
1  1    A
2  2    B
3 30    C

# left join
left_join(df.x, df.y, by = "id")

> left_join(df.x, df.y, by = "id")
  id name.x name.y
1  1      a      A
2  2      b      B
3  3      c   <NA>

# right join
right_join(df.x, df.y, by = "id")

> right_join(df.x, df.y, by = "id")
  id name.x name.y
1  1      a      A
2  2      b      B
3 30   <NA>      C

---他の結合---
R 内部結合(inner join)
R 内部結合(複数key)
R 外部結合(left join, right join)
R 完全外部結合(full join)
R アンチ結合(anti join)

---dplyrとは?---
R dplyrとはなんぞや?大規模データも簡単に処理? ~使い方~


R 内部結合(inner join)

【目的】 Rで内部結合(inner join)を使う
【方法】 inner_join(df.x, df.y, by = "key")
【補足】 library(dplyr)が必要

テスト用のデータフレーム作成

v.x <- c(1,2,3)
v.y <- c(10,20,30)

df.x <- data.frame(id = v.x)
df.y <- data.frame(id = v.y)

> df.x
  id
1  1
2  2
3  3

> df.y
  id
1 1
2 2
3 30 

inner_join(df.x, df.y, by = "id")

> inner_join(df.x, df.y, by = "id") 
  id
1  1
2  2

---他の結合---
R 内部結合(inner join)
R 内部結合(複数key)
R 外部結合(left join, right join)
R 完全外部結合(full join)
R アンチ結合(anti join)

---dplyrとは?---
R dplyrとはなんぞや?大規模データも簡単に処理? ~使い方~

R データフレームを縦に結合

【目的】 データフレームを縦に結合する
【方法】 rbind(df.x, df.y)
【補足】 列名が同じであること

テスト用のデータフレーム作成

v.x <- c(1,2,3)
v.y <- c(10,20,30)

df.x <- data.frame(id = v.x)
df.y <- data.frame(id = v.y)

> df.x
  id
1  1
2  2
3  3

> df.y
  id
1 10
2 20
3 30 

df.z <- rbind(df.x, df.y)

> df.z
  id
1  1
2  2
3  3
4 10
5 20
6 30

R 複数のデータフレームをたてに連結する

【目的】 複数のデータフレームをたてに連結
【方法】 rbind_all(list(df.x, df.y, df.z))
【補足】 異なる列名もつなげる

テスト用のデータフレーム作成

v.x <- c(1,2,3)
v.y <- c(10,20,30)

df.x <- data.frame(id = v.x)
df.y <- data.frame(id = v.y)

> df.x
  id
1  1
2  2
3  3

> df.y
  id
1 10
2 20
3 30 

df.z <- rbind(df.x, df.y)

> df.z
  id
1  1
2  2
3  3
4 10
5 20
6 30

rbind_all(list(df.x, df.y, df.z))

> rbind_all(list(df.x, df.y, df.z))
Source: local data frame [12 x 1]

   id
1   1
2   2
3   3
4  10
5  20
6  30
7   1
8   2
9   3
10 10
11 20
12 30

列名が異なるデータフレームを用意する

v.d <- c(1,2,3)
df.d <- data.frame(d = v.d)

> df.d
  d
1  1
2  2
3  3

rbind_all(list(df.x, df.y, df.d))

> rbind_all(list(df.x, df.y, df.d))
Source: local data frame [9 x 2]

  id  d
1  1 NA
2  2 NA
3  3 NA
4 10 NA
5 20 NA
6 30 NA
7 NA  1
8 NA  2
9 NA  3