【问题标题】:Test Match and Order between two vectors in R测试R中两个向量之间的匹配和顺序
【发布时间】:2014-04-30 16:05:56
【问题描述】:

我想测试两个向量之间的匹配和顺序。我知道匹配功能;是否有叠加层来同时评估订单?例如:

x <- c("a", "b", "c")
y <- c("b", "a", "c")   
x %in% y    

有完美匹配,但排序不正确。关于如何识别的想法?谢谢。

【问题讨论】:

  • 尝试all.equal(x,y)查看排序是否相同,all.equal(sort(x),sort(y))查看是否相同内容但顺序不同
  • 一个简单的顺序度量是mean(x==y) - 你的例子中有三分之一在同一个地方。如果您想以其他方式衡量订单(将一个转换为另一个的成对交换的数量、周期等),那么我们需要知道您认为哪些订单相似。
  • x[x == y] 怎么样?

标签: r match


【解决方案1】:
test_match_order <- function(x,y) {

if (all(x==y)) print('Perfect match in same order')

if (!all(x==y) && all(sort(x)==sort(y))) print('Perfect match in wrong order')

if (!all(x==y) && !all(sort(x)==sort(y))) print('No match')
}

test_match_order(x,y)

[1] "Perfect match in wrong order"

这是基于我上面原始评论的另一个版本,对下面的@alexis_laz 进行了改进,使函数更加健壮:

test_match_order2 <- function(x,y) {

if (isTRUE(all.equal(x,y))) print('Perfect match in same order')

if (!isTRUE(all.equal(x,y)) && isTRUE(all.equal(sort(x),sort(y)))) print('Perfect match in wrong order')

if (!isTRUE(all.equal(x,y)) && !isTRUE(all.equal(sort(x),sort(y)))) print('No match')
}

【讨论】:

  • 使用== 看起来有点脆弱;例如xx = c(1-0.9, 0.2); yy = c(0.2, 0.1); xx; yy; test_match_order(xx, yy)
  • @alexis_laz 好点。 OP 是否有这样的场景,其中重新声明类型会更健壮?
  • OP 似乎很满意 :)。您在评论中的all.equal 方法(包裹在isTRUE(.) 中)似乎没有多少惊喜,不是吗?
  • 是的,我更喜欢all.equal,但不知道如何确保输出为布尔值并避免使用FALSE 时产生的变化描述符。感谢isTRUE()——这对我来说是新的。酷:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 2016-01-03
相关资源
最近更新 更多