我的数据输入如下所示,我需要使用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?
但是我一直都失败了,如果有人为此解释了解决方案,那就太棒了。
答案 0 :(得分:0)
让我们说
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的解码代码。
如果数据中不存在我们的输入怎么办?如果我们需要检查数据中前两列的输入怎么办。
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]))