匹配R中的值对的子集变量

时间:2016-10-31 14:06:07

标签: r dataframe subset which

从给定的数据框(myData,在下面的示例中),我希望将变量的子集与值匹配至少存储在列表中的一对值(myList,在例子如下)。

myList <- list(c(8,15), c(2,3))

v1 <- c(1, 2, 3, 8, 15)
v2 <- c(3, 7, 8, 9, 10)
v3 <- c(2, 4, 5, 6, 7)
v4 <- c(8, 15, 6, 7, 9)

myData <- cbind(v1, v2, v3, v4) 

理想情况下,子集应仅由v1v4组成,因为在v1中出现对8,15和对2,3,而在v4中出现对8,15。

我尝试将which语句用于一对(即8,15),如下所示:

subset <- myData[which(myData==unlist(myList[[1]][1]) & myData==unlist(myList[[1]][2]))]

仍然,输出是一个空整数。我在which声明中遗漏了什么吗?另外,我如何为多对值实现代码?

非常感谢你的帮助!

GION

1 个答案:

答案 0 :(得分:2)

我找到了解决这个问题的方法:

myData[, unique(which(sapply(myList, function(y) apply(myData, 2, function(x)all(y %in% x))),arr.ind = T)[, 1])]
     v1 v4
[1,]  1  8
[2,]  2 15
[3,]  3  6
[4,]  8  7
[5,] 15  9

这是一个有点丑陋的功能因此解释: apply函数检查是否可以在myData列中找到myList列表项中的所有项。 sapply函数确保搜索列表中的所有项目。哪些语句检查他可以找到哪些并给出行和列。我们只对输出列的唯一行感兴趣。有点复杂,但看看它有希望它有帮助:))