如何在R中实现excel vlookup功能?

时间:2016-08-09 14:40:56

标签: r excel

我的数据输入如下所示,我需要使用R

中的以下值计算一个值
E7 = 20000

EXCEL VIEW(数据)

          L             M          N         O
 6     Min_Benefs   Max_Benefs  MSR_Min   MSR_Max
 7     5000         5999        0.039     0.036
 8     6000         6999        0.036     0.034
 9     7000         7999        0.034     0.032
10     8000         8999        0.032     0.031
11     9000         9999        0.031     0.03
12     10000        14999       0.03      0.027
13     15000        19999       0.027     0.025
14     20000        49999       0.025     0.022
15     50000        59999       0.022     0.02
16     60000        0.02                  0.02

从以上数据和输入我需要使用R

中的以下公式找出MSR的值
MSR = ( VLOOKUP($E$7,$L$7:$O$16,3)*(VLOOKUP($E$7,$L$7:$O$16,2) - $E$7) + VLOOKUP($E$7,$L$7:$O$16,4)*($E$7 - VLOOKUP($E$7,$L$7:$O$16,1)))/(VLOOKUP($E$7,$L$7:$O$16,2) - VLOOKUP($E$7,$L$7:$O$16,1))

当我的E7 = 20000时,我的MSR = 0.025

我尝试使用以下链接中提到的不同功能在R中进行 How to do vlookup and fill down (like in Excel) in R?

但是我一直都失败了,如果有人为此解释了解决方案,那就太棒了。

1 个答案:

答案 0 :(得分:0)

1

让我们说

ass_benif = 20000

和" msr_benif"是我在问题中粘贴的数据。

MSR = ((msr_benif$MSR_Min[match(ass_benif,msr_benif$Min_Benefs)])*(msr_benif$Max_Benefs[match(ass_benif,msr_benif$Min_Benefs)] - ass_benif) +
(msr_benif$MSR_Max[match(ass_benif,msr_benif$Min_Benefs)])*(ass_benif -   msr_benif$Min_Benefs[match(ass_benif,msr_benif$Min_Benefs)])) / 
((msr_benif$Max_Benefs[match(ass_benif,msr_benif$Min_Benefs)]) - (msr_benif$Min_Benefs[match(ass_benif,msr_benif$Min_Benefs)]))

以上代码是上述vlookup函数中R的解码代码。

2

如果数据中不存在我们的输入怎么办?如果我们需要检查数据中前两列的输入怎么办。

ass_benif = 55555  
vec <- unlist(msr_benif[,c(1,2)]) # create vector
near_ass_benif = as.numeric(vec[which.min(abs(vec - ass_benif))])

a = ifelse(is.na(match(near_ass_benif,msr_benif$Min_Benefs)) == T, match(near_ass_benif,msr_benif$Max_Benefs) ,match(near_ass_benif,msr_benif$Min_Benefs))


MSR = ((msr_benif$MSR_Min[a])*(msr_benif$Max_Benefs[a] - ass_benif) +
   (msr_benif$MSR_Max[a])*(ass_benif - msr_benif$Min_Benefs[a])) / 
    ((msr_benif$Max_Benefs[a]) - (msr_benif$Min_Benefs[a]))