【发布时间】:2018-12-07 01:40:16
【问题描述】:
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 (0.251,0.500) 992 N0,3.47 重量( 0,0.250) 992 N1 等。
所以最终的输出应该是:
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"]
标签: r dataframe dplyr data.table tidyverse