我有两个长列表A和B,它们具有相同的长度但包含不同数量的等效元素:
列表A可以包含许多元素,这些元素也可以在同一字段中重复出现。
列表B只包含一个元素或一个空字段,即“character(0)”。
A还包含一些空字段,但对于这些记录,B中总是存在一个元素,因此A和B中没有空字段的记录。
我想根据以下规则将A和B的元素组合成相同长度的新列表C:
- 必须在C中包含来自A的所有元素-包括它们在同一字段中可能的重复。
- 如果B包含一个与A中同一记录中不存在的元素,则它也将被添加到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"
...
请问有谁能告诉我如何合并这两个列表,保留A中的重复项,并得到我想要的输出结果吗?
非常感谢您的帮助!
更新:可机器读取的数据:
A <- list(c("JAMES","JAMES"),
c("JOHN","ROBERT"),
c("WILLIAM","MICHAEL","WILLIAM","DAVID","WILLIAM"),
character(0))
B <- list("RICHARD","JOHN",character(0),"CHARLES")
dput
。 - Christoph_J