同じ長さであるが、同等の要素の数が異なる2つの長いリストAとBがあります。
リストAには、同じフィールドで繰り返すことができる多くの要素を含めることができます。
リストBには、要素が1つだけ含まれているか、空のフィールド、つまり「character(0)」が含まれています。
Aにもいくつかの空のフィールドが含まれていますが、これらのレコードには常にBに要素が存在するため、AとBに空のフィールドを持つレコードはありません。AとB
の要素を同じ長さの新しいリストに結合したいのですが、 C、次の規則に従います。
- Aのすべての要素は、同じフィールドでの潜在的な再発を含め、Cに存在する必要があります。
- 同じレコードのAにまだ存在していない要素がBに含まれている場合は、Cにも追加されます。
- ただし、Bに同じレコードのAにすでに存在する要素が含まれている場合、それは無視されます。
- Aに空のフィールドがある場合、このレコードのBの要素がCに追加されます。
- Bに空のフィールドがある場合、このレコードのAの要素がCに追加されます。
これは、これらのリストがどのように始まるかの例です。
> A
[1] "JAMES" "JAMES"
[2] "JOHN" "ROBERT"
[3] "WILLIAM" "MICHAEL" "WILLIAM" "DAVID" "WILLIAM"
[4] character(0)
...
> B
[1] "RICHARD"
[2] "JOHN"
[3] character(0)
[4] "CHARLES"
...
これは私が探している正しい出力です:
> C
[1] "JAMES" "JAMES" "RICHARD"
[2] "JOHN" "ROBERT"
[3] "WILLIAM" "MICHAEL" "WILLIAM" "DAVID" "WILLIAM"
[4] "CHARLES"
...
私は試しました、例えば:
C <- sapply(mapply(union, A,B), setdiff, character(0))
しかし、これにより、残念ながらAからの再発が削除されました。
> C
[1] "JAMES" "RICHARD"
[2] "JOHN" "ROBERT"
[3] "WILLIAM" "MICHAEL" "DAVID"
[4] "CHARLES"
...
誰かが私に、これら2つのリストを組み合わせて、Aからの繰り返しを保存し、私が望む出力を達成する方法を教えてもらえますか?
事前にどうもありがとうございました!
更新:機械可読データ:
A <- list(c("JAMES","JAMES"),
c("JOHN","ROBERT"),
c("WILLIAM","MICHAEL","WILLIAM","DAVID","WILLIAM"),
character(0))
B <- list("RICHARD","JOHN",character(0),"CHARLES")