2017-09-10 6 views
2

現在、同じ長さでない異なるベクトルの値の間にシーケンスを作成しようとしています。2つのベクトルにわたる特定の値の間のシーケンスの作成

Iは2次のベクトルaおよびb有する想像:1:3:I(ここでaの値とbの次の最高値との間の配列を示す第三のベクトルを生成したい

a<-c(1, 8, 14, 34, 46, 55) 
b<-c(3, 6, 12, 13, 18, 42, 49, 50, 57, 200) 

1,2,3として; 8:128,9,10,11,12; 14:1814,15,16,17,18とし、最後に55:5755,56,57とする。

mapplyを使用しても、所望の結果が得られなかった。

答えて

6

我々は、「A」の値に基づいて、「B」をサブセットするfindIntervalを使用し、Mapと「A」の要素と「B」の部分集合要素間の対応する配列(:=)を得ることができ

Map(`:`, a, b[findInterval(a, b) + 1]) 
#[[1]] 
#[1] 1 2 3 

#[[2]] 
#[1] 8 9 10 11 12 

#[[3]] 
#[1] 14 15 16 17 18 

#[[4]] 
#[1] 34 35 36 37 38 39 40 41 42 

#[[5]] 
#[1] 46 47 48 49 

#[[6]] 
#[1] 55 56 57 
+0

こんにちは、私は遅れて追加のお問い合わせを持っている:コードは、私のデータの95%のためにうまく働いています。しかし、場合によっては(前と同じ構造の入力データ)、コードは ".Primitive(": ")(ドット[[1L]] [26L]、ドット[[2L]] [ [26L]]): NA/NaN引数 "output。なぜ私は見ることができません。 "NA/NaN Argument"は処理するデータがないと言われていますが、前の手順を手動でチェックしました。あなたはそれについて説明していますか? – sant

+0

@santあなたはNA/NaNだけのケースであるかどうかを確認できますか?その場合、 'if/else'条件を使用してそれを処理してください。 – akrun

+0

はい、動作しないリスト全体があります。例えば、最初のポストからaとbを取る:私は2つの同様に構造化されたリストを実行し、結果はNA/NaN-Errorです。 if/else条件をどのように含めるかを指定できますか?ありがとうございました! – sant

4
lapply(a, function(x) x:b[b>x][1]) 
#[[1]] 
#[1] 1 2 3 

#[[2]] 
#[1] 8 9 10 11 12 

#[[3]] 
#[1] 14 15 16 17 18 

#[[4]] 
#[1] 34 35 36 37 38 39 40 41 42 

#[[5]] 
#[1] 46 47 48 49 

#[[6]] 
#[1] 55 56 57 
関連する問題