2017-06-05 11 views
2

入力:マッピングテーブルの値の範囲を調べる方法は?

library(dplyr) 
A <- data_frame(Type=c("A","A","B"),R=c(3, 7, 12), Value = c(120, 130,300)) 
A 
    Type  R Value 
    (chr) (dbl) (dbl) 
1  A  3 120 
2  A  7 130 
3  B 12 300 

マッピングデータセット:

Mapping <- data_frame(Type=c("A","A","A","B","B","B"), Rmin =  c(1,6,11,1,6,11), Rmax = c(5,10,15,5,10,15), Threshold = c(50,100,200,50,200,300)) 
Mapping 

    Type Rmin Rmax Threshold 
    (chr) (dbl) (dbl)  (dbl) 
1  A  1  5  50 
2  A  6 10  100 
3  A 11 15  200 
4  B  1  5  50 
5  B  6 10  200 
6  B 11 15  300 

出力ステップを、以下に取得することが期待されています。

  1. AとMappingの同じType値で、R> = RminでR < = Rmaxのエントリのしきい値を見つけます。たとえば、Aの行1の表の場合は、50が必要です(1 < = 3 < = 5、Aと入力します)。
  2. isAbove値が結果isAbove <- 120>=50

を割り当てることによって得られる、期待される出力は次のとおり

B <- data_frame(Type=c("A","A","B"),R=c(3, 7, 12), Value = c(60, 90,250), isAbove = c(T,F,F)) 
B 

    Type  R Value isAbove 
    (chr) (dbl) (dbl) (lgl) 
1  A  3 120 TRUE 
2  A  7 130 TRUE 
3  B 12 300 FALSE 
+0

つの質問:(1)どのように[値]を変更する必要がありますか?その背後には論理がないようです。 (2) 'B 'の2行目については、' Mapping'(行2)で一致する行に対して '130'が' 100'を超えているので 'isAbove'は' TRUE'になります。ではない? – Jaap

+0

@jaap、それらを指摘してくれてありがとう。 (1)「値」列にタイプミスがありました。 Bの '' 'Value''カラムはA.(2)からコピーしてください。質問が更新されました。 – HappyCoding

答えて

2

非エクイを用いdata.tableの能力が、そのために最適であるジョイン。使い方:

library(data.table) 

setDT(A) 
setDT(Mapping) 

A[Mapping, on = .(Type, R > Rmin, R < Rmax), isAbove := Value > Threshold] 

あなたが得られます。明確化のため

> A 
    Type R Value isAbove 
1: A 3 120 TRUE 
2: A 7 130 TRUE 
3: B 12 300 FALSE 
関連する問題