2016-11-22 12 views
0

私はxデータフレームの大きなリスト(List1)を持ち、それぞれ2つの変数の4つの観測値から構成されています。典型的なデータフレームは次のようになります。列から最も近い値を見つけ、隣の列から番号を返します(リスト内)

YEAR TEMP 
1861 2.09 
1862 2.17 
1863 2.02 
1864 2.04 
............ 

私は値2に最も近い第2列の値を見つけたい(理想的に1.95未満2.05以上とないではない)、その後、年を返します隣接する列から左に移動します。これは、VLOOKUPやINDEXなどの関数を使ってExcelでは簡単ですが、Rには同等の関数がありますか?それは> = 1.95および= 2.05 <にする必要がある部分を無視して、私がこれまで試してみました:

result=lapply(List1, function(x) which.min(abs(x-2))) 

が、これはエラーとして返されます。

Error in which.min(abs(x - 2)) : 
(list) object cannot be coerced to type 'double' 

私は私がこれまでだとは思いません誰も私がこれを訂正できる場所を提案してもらえますか?

+1

方法lapply(List1を、機能(I '程度)は、i $ YEAR [I $ TEMP> = 1.95&I $ TEMP <を= 2.05] ) '? – Sotos

+0

あなたはxがdata.frameであることを考慮する必要があります – Cath

答えて

2

あなたの機能はdata.framesのリストの各要素にapplyです。

だから、あなたの文を動作させるために、あなたがテストをしたいにxの列を使用する必要があります:あなたが唯一の年にしたい場合

result <- lapply(List1, function(x) x[which.min(abs(x$TEMP-2)), ]) 

または

result <- lapply(List1, function(x) x$YEAR[which.min(abs(x$TEMP-2))]) 

を。あなたが他の条件を追加したい場合は

、試してみてください。

result <- lapply(List1, function(x) {x <- x[x$TEMP <= 2.05 & x$TEMP >= 1.95, ] ; return(x$YEAR[which.min(abs(x$TEMP-2))])}) 
+0

これらの提案に感謝します。最初の解決策は問題の最初の部分でうまく動作しますが、余分な条件を追加する解決策は予期せぬ事情により機能しません。 –

+0

@ DJ-AFC本当に私は閉じ括弧を忘れていました。今はうまくいきます。これが違う場合は教えてください。 – Cath

+1

ファンタスティック@キャス - 本当にうまく動作します。ありがとうございました。 –

関連する問題