2016-11-10 8 views
0

ここでは簡単な質問があります。水柱にランダムに配置された一定量の粒子があるとしましょう。我々は各粒子の深さ(df)に関する情報を有し、我々は水柱(プロファイル)の温度プロファイルを有する。シンプルな検索機能のある種のR

temp <- seq(4,20,by=(20-4)/90) 
depth1 <- c(1:91) 
profile <- data.frame(depth1, temp) 

id <- c(1:182) 
depth2 <- c(rep(5:45,3),50:91,1:17) 
df <- data.frame(id, depth2) 

与えられた深さで特定の粒子(例えば、ID = 13)の周囲温度を返す最も簡単な方法は何ですか?この場合の出力は、[1] 6.844444でなければなりません。なぜなら、 "profile"のように17メートルの温度が6.844444であるからです。リターンは単一の値でなければならず、コマンドはできるだけ短くする必要があります。それでは、関数()で繰り返し使用されます。

ので、[角括弧]またはを使用して、非常にシンプルなソリューションが存在しなければならない...任意の助け

おかげで...

ロバート

+0

あなたの期待出力がどうなるか、完全に明確ではありません。 'df $ ID == 13 'の場合、期待される戻り値は16.6222です(ここで' profile $ depth1 = 72'は 'df $ depth2 [df $ ID == 13]' – Benjamin

+0

'merge(df、profile、by .x = "depth2"、by.y = "depth1") ' – Roland

+0

再現可能な例では' runif() 'を使うのは賢明ではなかったので、より具体的な例について話すことができます。今すぐクリアしてください... – Robert

答えて

0

あなたは

profile[df[df$id==13, "depth2"], "temp"] 

内側の式がdepth1の数値ではなく、論理ベクトルに評価し、それをさらに短縮することができます。

またはターゲット値が知られている列のインデックスでは常にしている場合でも、短い:

profile[df[df$id==13, 2], 2] 
+0

ありがとう@ジョー...最短のようです... – Robert

0

は自分でそれを手に入れた...

profile[profile$depth1==df[df$id==13,"depth2"],"temp"]

とにかく感謝、 ロバート