一个一个统计vector中多个数的出现次数
Count occurence of multiple numbers in vector one by one
我有两个向量
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()
.
的方式
这是一个基本的 R 选项,使用 sapply
和 which
:
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
这是一个向量化的方法
x = expand.grid(b,a)
rowSums( matrix(x$Var1 == x$Var2, nrow = length(b)))
# [1] 3 3 2 1 2 0
您可以使用 factor
和 table
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
我有两个向量
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()
.
这是一个基本的 R 选项,使用 sapply
和 which
:
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
这是一个向量化的方法
x = expand.grid(b,a)
rowSums( matrix(x$Var1 == x$Var2, nrow = length(b)))
# [1] 3 3 2 1 2 0
您可以使用 factor
和 table
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