2016-10-26 13 views
2

これには超簡単な解決策があると確信していますが、私はそれが何であるか把握できません。2つのベクトルから複数の系列のベクトルを作成する

私はRで長い単一変数データセットを持っています。私は複数の関連する範囲の始めと終わりを識別することができます。残りのデータを除外するだけです。

だから、ベクトルxを与えられた:私はこのようになりますxのサブセットを返す必要が

> startpoints <- c(1,11,101) 
> endpoints <- c(3,13,103) 

:始点と終点の

> x <- c(2400:2600) 

およびベクターを

> x[c(1:3, 11:13, 101:103)] 
[1] 2400 2401 2402 2410 2411 2412 2500 2501 2502 

私はこれを試しました:

> x[startpoints:endpoints] 

しかし、Rは、単に各ベクトルから最初の値をとり、そのシリーズを返します:私startpointsおよびエンドポイントのベクトルは常に長さが同じでなければなりません警告

のカップルと...

[1] 2400 2401 2402 

を、それらは異なるデータセットと一緒に長さが異なる場合があります。

答えて

5

mapplyを使用して、 'startpoints'、 'endpoints'の対応する要素間のシーケンスを取得できます。これは 'x'ベクトルをサブセット化できます。 @nicolaが述べたようにシーケンスは、長さが異なる場合

x[mapply(`:`, startpoints, endpoints)] 
#[1] 2400 2401 2402 2410 2411 2412 2500 2501 2502 

は、mapplylist返すので、我々はunlistそれが

x[unlist(mapply(`:`, startpoints, endpoints))] 
+2

はるかに良い '非公開に(地図(する必要があり、 ":"、startpoints、エンドポイント)) ':この例のように' endpoints'と 'startpoints'の間に違いがない場合、あなたの行は動作しません。たとえば、 'endpoints <-c(3,13,104)'と試してみてください。 – nicola

+0

@nicolaはい、そうです。ありがとう。 – akrun

関連する問題