2016-05-10 9 views
3

風速測定のdata.frameで一定のしきい値より小さい値を見つける必要があります。私は閾値の下で2つの連続した観測を探しています。私はこれらの基準を満たすシリーズの最初の観測の位置を返すことにしたい。R:しきい値以下の連続値を見つける

誰かが私を助けてください! :)次はあなたが求めているもののために働く必要があり

+4

'dput(dataframe_name) 'でサンプルデータを提供してください。参照してください:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-exgestion-r-reproducible-example/5963610 – coatless

答えて

2

ここ
# create random vector, for example 
set.seed(1234) 
temp <- rnorm(50) 

# get position of all observations that fulfill criterion, here obs is > 0.2 
thresholdObs <- which(temp > .2) 

、いくつかの基準を満たすすべての観測の位置を返しますwhich。この時点で、あなたの判断基準を満たす観察があることをテストすることは賢明です。これは%in%演算子と一緒にintersect機能またはサブセットで達成することができます:長さ0が返された場合

length(intersect(thresholdObs, thresholdObs + 1)) 

または

length(thresholdObs[thresholdObs %in% (thresholdObs + 1L)]) 

、その後、そのような観察は、あなたのデータではありません。長さが1又はgreateのであれば@Frank以下に指摘するように、あなたはminは、長さ0のベクトルを供給されている場合、それに無限大を意味し、Infを返し、

# get the answer 
min(thresholdObs[thresholdObs %in% (thresholdObs + 1L)] - 1) 

又は

min(intersect(thresholdObs, thresholdObs + 1))-1 

を使用することができR.私はこれらの位置を増やすthresholdObs + 1とこれらの2つのセットの交差点を取る。返される位置は、前の位置が閾値テストに合格した位置だけです。次に、これらの位置から1を引いて、最小値をとって目的の結果を得ます。 whichが注文した結果を返しますので、次のようにも動作します:[1]が交差点内の最初の要素を抽出し

intersect(thresholdObs, thresholdObs + 1)[1] - 1 

intersect(thresholdObs, thresholdObs + 1) - 1 

又は

thresholdObs[thresholdObs %in% (thresholdObs + 1L)] 

が閾値を通過する少なくとも2つの連続要素がある全ての位置を返すことに注意してください。しかし、2を超える連続する値を返す複数の位置が返されます。

+0

あなたのサンプルデータは、交点が空であり、それが 'min(数値0)) 'が返す。より安全で簡単なのは 'w = which(temp> .5)です。 w [w%in%(w + 1L)] ' – Frank

+0

@Frankこれはより安全な選択肢のようです。 – lmo

関連する問題