向量的多少个元素小于或等于此向量的每个元素?

时间:2017-08-24 06:19:56

标签: r for-loop vector

我有兴趣编写一个程序,该程序给出向量x的元素数量,它们小于或等于向量x中的任何给定值。

让我们说

x = [1,3,8,7,6,4,3,10,12]

我想计算x中小于或等于1,到3,到8等的元素数量。例如,x[5]的第五个元素是6,小于或等于6的元素数等于5。但是,我只知道如何进行元素比较,例如x[1]<=x[3]

我想我会使用for循环并在这里有这样的东西:

for (i in length(x)){
       if (x[i]<=x[i]){
       print(x[i])}
       # count number of TRUEs
}

然而,这段代码显然没有做我想要的。

4 个答案:

答案 0 :(得分:5)

使用outer一次进行所有比较:

outer(x, x, "<=")
#       [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8] [,9]
# [1,]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE TRUE
# [2,] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE TRUE
# [3,] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE TRUE
# [4,] FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE  TRUE TRUE
# [5,] FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE TRUE
# [6,] FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE TRUE
# [7,] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE TRUE
# [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE TRUE
# [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE

colSums(outer(x, x, "<="))
#[1] 1 3 7 6 5 4 3 8 9

答案 1 :(得分:3)

您还可以使用*apply系列,如下所示,

sapply(x, function(i) sum(x <= i))
#[1] 1 3 7 6 5 4 3 8 9

答案 2 :(得分:3)

我们可以使用findInterval

findInterval(x, sort(x))
#[1] 1 3 7 6 5 4 3 8 9

答案 3 :(得分:3)

另一种选择是使用rank,对值进行排名。将ties.method参数设置为&#34; max&#34;检索包含值(&#34;&lt; =&#34;与&#34;&lt;&#34;)。

rank(x, ties.method="max")
[1] 1 3 7 6 5 4 3 8 9