is.element()用于多个变量

时间:2016-05-21 19:43:42

标签: r

SELECT itemname FROM Table WHERE (Status='retired' and ItemName='A' or ItemName='B') 删除向量的重复元素,并复制数组的行。

unique()is.element()%in%仅适用于矢量(或NULL)。

多个变量是否有值匹配或设置操作?(例如数组的行)

我目前的解决方法就是这样。它不是很优雅,而且对“_”匹配显然很敏感。

match()

编辑:添加可重现的示例

假设你想购买一辆具有相同数量的前进档和化油器的汽车。它可以是1个,每个2个等。您不知道市场上可用的汽车(参见match.multiple <- function (x, table, nomatch = NA_integer_, incomparables = NULL) { x_vector <- apply(x, 1, paste, collapse="_") table_vector <- apply(table, 1, paste, collapse="_") match(x_vector, table_vector, nomatch, incomparables)} is.element.multiple <- "%in.multiple%" <- function (el, set) match.multiple(el, set, 0) > 0 )是否符合您的偏好< / em>的

mtcars

因此,您要对两个变量进行匹配:齿轮化油器。

preferences <- cbind(1:8, 1:8)
available <- cbind(mtcars$gear, mtcars$carb)

这些是等量的前进档和化油器的数量。

m <- match.multiple(preferences, available)
m
# [1] NA NA 12  1 NA NA NA NA
which(!is.na(m))
# [1] 3 4

这些是您应该考虑的汽车目录条目。

2 个答案:

答案 0 :(得分:1)

正如我在评论中提到的,我对this question的回答可以用来解决这个问题。这是如何做到的,用OP的可重复示例进行演示:

pg_restore -d dbName file.sql

答案 1 :(得分:0)

在数组行中查找向量出现的函数:

为了测试向量(v)是否是数组或矩阵(m)的行,我们可以构造第二个矩阵,其尺寸与我们想要搜索的相同,但是由向量的重复行组成正在寻找,并检查此构造数组中的任何行是否与原始

相同
is.row.in.rows <- function(v,m) {
  which(length(v) == rowSums(m == matrix(v, nrow(m), ncol(m), byrow=TRUE)))
}

请注意,也可以使用which(apply(m, 1, all.equal, v) == TRUE)使用循环执行相同的测试。但是,使用rowSums的上述矢量化版本更快。

使用此功能解决问题中可重复的示例:

a <- unlist(apply(preferences, MARGIN = 1, is.row.in.rows, available))
a
# [1] 12 13 14  1  2 10 11

mtcars[a,]
#               mpg cyl  disp  hp drat    wt  qsec vs am gear carb
# Merc 450SE    16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
# Merc 450SL    17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
# Merc 450SLC   15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
# Mazda RX4     21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
# Merc 280      19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
# Merc 280C     17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4