逐一统计向量中多个数字的出现

时间:2018-06-22 04:04:48

标签: r counting

我有两个向量

a <- c(1, 5, 2, 1, 2, 3, 3, 4, 5, 1, 2)
b <- (1, 2, 3, 4, 5, 6)

我想知道b中每个元素在a中出现多少次。所以结果应该是

c(3, 3, 2, 1, 2, 0)

我发现的所有方法,例如match()==%in%等,都不适合整个向量。我知道我可以对b中的所有元素使用循环,

for (i in 1:length(b)) {
    c[I] <- sum(a==b, na.rm=TRUE)
}

但是这经常使用并且花费很长时间。这就是为什么我在寻找矢量化方法或使用apply()的方法。

3 个答案:

答案 0 :(得分:2)

这是基本的R选项,将sapplywhich结合使用:

a <- c(1, 5, 2, 1, 2, 3, 3, 4, 5, 1, 2)
b <- c(1, 2, 3, 4, 5, 6)

sapply(b, function(x) length(which(a == x)))
[1] 3 3 2 1 2 0

Demo

答案 1 :(得分:2)

您可以使用factortable

table(factor(a, unique(b)))
#
#1 2 3 4 5 6
#3 3 2 1 2 0

自从您提到match以来,这里就可能没有sapply循环(感谢@thelatemail)

table(factor(match(a, b), unique(b)))
#
#1 2 3 4 5 6
#3 3 2 1 2 0

答案 2 :(得分:1)

这是向量化方法

func testVerifiedViewWithTagIsLoadIt() {
    let sut = ViewController()
    _ = sut.view
    let view = sut.view.viewWithTag(10)
    XCTAssertNotNil(view)
    XCTAssertNotNil(sut.view.viewWithTag(10))
}