一种非索引导向的方法,用于搜索R中两个列表之间的唯一值

时间:2016-07-18 19:01:13

标签: r indexing unique

假设我有一个列表的部分如下所示:

aaa[[1]]
# [1] "A5-5,73"  "B3-4,73"  "E3-8,73"  "A1-8,73"  "C1-7,73"  "A1-2,73"  "C3-2,73"  "C1-1,73"

假设我有另一个列表,其中的部分看起来像这样:

bbb[[1]]
# [1] "B3-4,73"  "C3-2,73"  "A5-5,73"  "A1-8,73"  "A1-2,73"  "A1-5,73"  "B1-1,73"  "C1-4,73"

考虑一下我现在正在运行

which(aaa[[1]]!= bbb[[1]])

返回

# [1]  1  2  3  5  6  7  8  

这在技术上是正确的,因为[4]aaa

中的索引bbb是相同的

我希望返回的内容是:

# [1] "C1-7,73"  "A1-2,73" "C1-1,73"

因为这些是aaa的值,不论位置如何都不在bbb中。我也愿意提供一个只提供索引号的解决方案,例如:

# [1] 5 6 8

以下是一个可重复的示例:

aaa <- vector("list")
aaa[[1]] <- c("A5-5,73",  "B3-4,73",  "E3-8,73",  "A1-8,73",
          "C1-7,73",  "A1-2,73",  "C3-2,73",  "C1-1,73")
bbb <- vector("list")
bbb[[1]] <- c("B3-4,73",  "C3-2,73",  "A5-5,73",  "A1-8,73",
          "A1-2,73",  "A1-5,73",  "B1-1,73",  "C1-4,73")

2 个答案:

答案 0 :(得分:3)

如果您想将列表aaa的每个元素与相应的元素bbb进行比较,只需这样做。

mapply(FUN = setdiff, x = aaa, y = bbb)

写这篇文章的时候,我看到@RichardScriven的评论已经提到了setdiff

答案 1 :(得分:2)

正如@Richard Scriven在评论中提到的那样

setdiff(aaa[[1]], bbb[[1]])

是获取元素的方法。当你还要求索引号时,可以使用which()

which(aaa[[1]] %in% setdiff(aaa[[1]], bbb[[1]]))

%in%产生逻辑值,而()告诉它们为何为真。