df1 <- data.frame(MLID=c('992','992','BJR'),
Position=c('N0','N1','N1'),
Weight=c(0.125,0.58,0.69))
df2 <- data.frame(MLID=c('992','992','992','992',
'BJR','BJR','BJR','BJR'),
Weight=c(0,0.251,0.501,1.001,
0,0.251,0.501,1.001),
N0=c(2.80,4.05,4.05,4.05,
4.05,4.05,4.05,4.05),
N1=c(3.47,4.73,4.95,5.15,
4.73,7.73,4.95,5.15) )
我想要的是将这两个表格合并,按照以下规则进行:
- 根据MLID进行合并
- 查看位置(N0或N1)
- 找到重量所在范围(类似于Excel中的近似VLOOKUP函数)(例如2.8表示在992 N0上负责重量为(0,0.250)的收费,4.05表示在992 N0上负责重量为(0.251,0.500)的收费,3.47表示在992 N1上负责重量为(0,0.250)的收费等)
因此最终输出应该是:
MILD Position Weight Charge
992 N0 0.125 2.8
992 N1 0.580 4.95
BJR N1 0.690 4.95
能否在R中完成这个任务?尤其是在dplyr包中?
library(data.table);setnames(melt(setDT(df2), measure = c("NO", "N1"), variable.name = "Position", value.name = "Charge"), "Weight", "wt")[df1, on = .(MLID, Position, wt <= Weight), mult = "last"]
- akrun