集合は定義から、同じ要素は含まないわけですが、そうゆうのも許して欲しいときがある。こういう2つのベクトルがあったとき
x <- c("a", "b", "c", "a", "a", "b") y <- c("c", "d", "c")
Rでの差集合演算を使うともちろんこうなる。
> setdiff(x, y) [1] "a" "b"
定義からいくともちろん正しいのだが
c("a", "b", "a", "a", "b")
で返ってきて欲しい場合もある。というわけで、ごねくりまわしてなんとかしてみた。頭が悪いので、きっともっとよい方法があるに違いない。まる。
x <- c("a", "b", "c", "a", "a", "b") y <- c("c", "d", "c") tmp <- table(x)[setdiff(names(table(x)), names(table(y)))] result <- unlist(apply(data.frame(names(tmp), as.vector(tmp)), 1, function(x) { x1 <- x[1];x2 <- x[2] rep.int(x1, x2) }))
結果。
> result [1] "a" "a" "a" "b" "b"
順序は保存されないが、回数は保存されるのでまあいいか。