LoginSignup
4
4

More than 3 years have passed since last update.

Rの演算子 %in%

Last updated at Posted at 2019-05-23

1.はじめに

Rでデータやファイルを編集・加工してて役立ったので、備忘録も兼ねて投稿。

演算子 %in% を使ってデータの処理。

A %in% B
A に B のデータがあれば TRUE 、なければ FALSE がかえってきます。

! A %in% B
逆パターンはこちら
A に B のデータがあれば FALSE 、なければ TRUE がかえってきます。

2.まずはお手本データ

お手本データを作成。

List1.csv
ID,NAME,Town,Age
1,A,Tokyo,27
2,B,Osaka,30
3,C,Nagoya,35
4,D,Tokyo,26
5,E,Osaka,41
List2.csv
ID,NAME,Town,Age
1,A,Tokyo,27
3,C,Nagoya,35

csvファイルをRで読み込み

R
List1 <- read.csv('List1.csv', sep=",",header=T)
List2 <- read.csv('List2.csv', sep=",",header=T)

3.List1 と List2、、、かぶってるデータ教えて

List1 の中に List2 のデータあるかな?
(答え→ ID 1、3)

R
List1$ID %in% List2$ID #IDで検索
[1]  TRUE FALSE  TRUE FALSE FALSE #1番目3番目がTRUE

重複している行(TRUE)だけのデータフレームを作ってみよう。

R
List_1_2 <- List1[List1$ID %in% List2$ID,]
List_1_2
ID NAME   Town Age
1  1    A  Tokyo  27
3  3    C Nagoya  35

4.List1 と List2、、、かぶってないデータ教えて

List1 の中で List2 のデータがないのはどれ?
(答え→ ID 2、4、5)

R
! List1$ID %in% List2$ID #先頭に !
[1] FALSE  TRUE FALSE  TRUE  TRUE #1番目3番目がFALSE

重複していない行(TRUE)だけのデータフレームを作ってみよう。

R
List_1_2 <- List1[! List1$ID %in% List2$ID,]
List_1_2_
  ID NAME  Town Age
2  2    B Osaka  30
4  4    D Tokyo  26
5  5    E Osaka  41

5.おまけ

結果データフレームをcsvで出力しましょう。

R
out.name <- "List_1_2.csv"
write.table(List_1_2,file=out.name,quote=F,sep=",", row.names=F)

補足

参考URL
R マイナーな演算子 %in% で期間の重なりチェック

ひとりごと
データフレームの扱いは奥が深い。。。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4