web-dev-qa-db-ja.com

Rで特定の間隔でベクトルを作成するにはどうすればよいですか?

ベクトルの作成について質問があります。 _a <- 1:10_を実行すると、「a」の値は1,2,3,4,5,6,7,8,9,10になります。

私の質問は、要素間の特定の間隔でベクトルを作成する方法です。たとえば、1〜100の値を持つベクトルを作成しますが、5、10、15、20、...、95、100の値を持つベクトルを取得するために、5の間隔でのみカウントします。

Matlabでは_1:5:100_ができると思いますが、Rを使用してこれをどのように行うのですか?

5*(1:20)を試すこともできますが、もっと短い方法はありますか? (この場合、全体の長さ(100)を知ってから、間隔のサイズ(5)で割って20を取得する必要があるため)

33
Luli

Rでは、同等の関数はseqであり、オプションbyとともに使用できます。

seq(from = 5, to = 100, by = 5)
# [1]   5  10  15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90  95 100

byに加えて、length.outalong.withなどの他のオプションも使用できます。

length.out:0から1の間で合計10個の数字を取得したい場合:

seq(0, 1, length.out = 10)
# gives 10 equally spaced numbers from 0 to 1

along.with:入力として提供するベクトルの長さを取り、1:length(input)からベクトルを提供します。

seq(along.with=c(10,20,30))
# [1] 1 2 3

ただし、along.withオプションを使用する代わりに、この場合はseq_alongを使用することをお勧めします。 ?seqのドキュメントから

seqは汎用であり、ここではデフォルトの方法のみを説明します。引数名に関係なくfirst引数のクラスでディスパッチすることに注意してください。これは、1つの引数だけで呼び出されて、これが一緒に処理されることを意図している場合、意図しない結果になる可能性があります。その場合はseq_alongを使用することをお勧めします。

seq_along:seq(along.with(.))の代わりに

seq_along(c(10,20,30))
# [1] 1 2 3

お役に立てれば。

69
Arun

コードを使用する

x = seq(0,100,5) #this means (starting number, ending number, interval)

出力は

[1]   0   5  10  15  20  25  30  35  40  45  50  55  60  65  70  75
[17]  80  85  90  95 100
1
sumit

通常、ベクトルをいくつかの間隔に分割します。この場合、(a)はベクトルで、(b)は間隔の数である関数を使用できます。 (4つの間隔が必要だとします)

a <- 1:10
b <- 4

FunctionIntervalM <- function(a,b) {
  seq(from=min(a), to = max(a), by = (max(a)-min(a))/b)
}

FunctionIntervalM(a,b)
# 1.00  3.25  5.50  7.75 10.00

したがって、4つの間隔があります。

1.00 - 3.25 
3.25 - 5.50
5.50 - 7.75
7.75 - 10.00

カット機能も使用できます

  cut(a, 4)

# (0.991,3.25] (0.991,3.25] (0.991,3.25] (3.25,5.5]   (3.25,5.5]   (5.5,7.75]  
# (5.5,7.75]   (7.75,10]    (7.75,10]    (7.75,10]   
#Levels: (0.991,3.25] (3.25,5.5] (5.5,7.75] (7.75,10]
0
Anya Sti