ベクトルの作成について質問があります。 _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を取得する必要があるため)
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.out
やalong.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
お役に立てれば。
コードを使用する
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
通常、ベクトルをいくつかの間隔に分割します。この場合、(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]