#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% で期間の重なりチェック
ひとりごと
データフレームの扱いは奥が深い。。。