2016-09-06 12 views
-1

として、私はこのようになりますデータフレームを持って、それがオペレーターや災い値とカットポイント値を持っていますVLOOKUP演算子は文字列

Cutpoint <- c("<= 0","<= 2","<= 4.5","<= 8","> 8","Missing") 
WoE <- c("0.12","0.24","0.45","0.55","0.92","0.99") 
dictionary <- data.frame(Cutpoint,WoE) 

    Cutpoint WoE 
1  <= 0 0.12 
2  <= 2 0.24 
3 <= 4.5 0.45 
4  <= 8 0.55 
5  > 8 0.92 
6 Missing 0.99 

別のテーブルには、私は「何この

val_A <- c("a","a","b","b","c","c","c","d") 
val_B <- c("6","-1","3",NA,"7","8",NA,"9") 
table <- data.frame(val_A,val_B) 

    val_A val_B 
1  a  6 
2  a -1 
3  b  3 
4  b <NA> 
5  c  7 
6  c  8 
7  c <NA> 
8  d  9 

のように見えます達成しようとすると、結果テーブルが次のようになるように、辞書のval_Bの値を調べることです。

val_A table_B 
1  a 0.55 
2  a 0.12 
3  b 0.45 
4  b 0.99 
5  c 0.55 
6  c 0.55 
7  c 0.99 
8  d 0.92 

Tha任意のヒントのために多くのnks。

+2

** R ** MSエクセルではありません。

cc2 <- replace(as.numeric(cc),is.na(cc),nrow(dictionary)) 

今すぐ検索を行います。 'vlookup'は事ではありません。ネストされた 'ifelse'ステートメントや' switch'を使いたいとします。 –

答えて

1

この代入演算子を剥ぎ取ると、すべてが、最後の2つのカットポイントは「< =」であることを情報を使用することによって最も簡単に行うことができます。

データの設定:

Cutpoint <- c("<= 0","<= 2","<= 4.5","<= 8","> 8","Missing") 
WoE <- c("0.12","0.24","0.45","0.55","0.92","0.99") 
## stringsAsFactors=FALSE is *essential* here -- or 
## use options(stringsAsFactors=FALSE) to set globally 
dictionary <- data.frame(Cutpoint,WoE,stringsAsFactors=FALSE) 

val_A <- c("a","a","b","b","c","c","c","d") 
val_B <- c("6","-1","3",NA,"7","8",NA,"9") 
table <- data.frame(val_A,val_B,stringsAsFactors=FALSE) 

ストリップ比較演算子を、数値にカットポイントを強制:

ブレークポイント/カットポイントのベクトルを設定
cuts <- as.numeric(gsub("(<=|>)","",dictionary$Cutpoint)) 

:数値のカテゴリを探す

cuts2 <- c(-Inf,head(cuts,-2),Inf) ## all but last 2 vals of 'cuts', + Inf 

を:

cc <- cut(as.numeric(table$val_B),breaks=cuts2) 

代替NA値に対する最後のカテゴリ:

data.frame(val_A,table_B=as.numeric(WoE)[cc2]) 
関連する問題