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
这些是您应该考虑的汽车目录条目。
答案 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