2017-08-24 18 views
1

私はベクトルxの要素数が、ベクトルx内の任意の値よりも小さいか等しいプログラムを書くことに興味があります。ベクトルの要素数は、このベクトルの各要素以下ですか?

例えば8等に、の私は3に、より小さい又は1に等しいx内の要素の数を計算する

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

ましょうx[5]の5番目の要素である66より小さいか等しい要素の数は5に等しくなります。しかし、このコードは明らかにし

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

:しかし、私は私が私がforループを使用すると仮定し、ここでこのような何かを持っているなどx[1]<=x[3]

、要素ごとの比較を行う方法を知っています私がしたいことをしないでください。

+0

sapply()works、thanks! 'i'はすぐに' x'のi番目の要素を意味しますか? – marianess

+1

はい正確に.... – Sotos

答えて

3

次のようにも*applyファミリを使用することができ、

sapply(x, function(i) sum(x <= i)) 
#[1] 1 3 7 6 5 4 3 8 9 
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 
+0

パーフェクト!あなたが考慮する必要があるのは、合計の各要素を考慮していることです。したがって、関心に応じて、1つの単位を各値に引くかどうかを決める必要があります。 – R18

3

我々はfindInterval

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

別の方法を使用することができます値をランク付けするrankを使用します。 ties.method引数を "max"に設定すると、インクルーシブ値( "< ="対 "<")が取得されます。

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

これが最適なソリューションです。 – Roland

関連する問題