r - 将区间与 R 中另一个表中的值匹配
问题描述
目前,我有一个 df 和一个价格表。
Order Number wgt wgt_intvl price
------------------- --------------- -----
01 22 0-15 50
02 5 15-25 75
03 35 25-50 135
我想要的是将df中的权重匹配到R中价格表的区间。例如,第一个订单(Order Number 01
)对应的价格为75。因此,我想在第一个df中添加一列,说df$cost
对应于根据wgt_intvl
价格表中的适当价格。
我认为这样做的方式是使用if-else
声明,但这是非常低效的,我想知道是否有更好的方法来做到这一点。实际上,这些表格要长得多——价格或重量区间没有逻辑上的“积累”。我在这张表中有 15 个重量区间。我当前的解决方案如下所示:
If(wgt < 15){
df$cost <- 50
} else if (wgt > 15 & wgt < 25){
df$cost <- 75
} else if(wgt > 25 & wgt < 50){
df$cost <- 135
}
这乘以十五,使用价格表的相应价格。我想要一个更有效的解决方案。提前致谢!
解决方案
使用末尾注释中可重现的数据,形成切点向量(即每个区间的第一个数字),然后使用findInterval
找到与权重对应的区间。
cutpoints <- as.numeric(sub("-.*", "", dfprice$wgt_intvl))
transform(dfmain, price = dfprice$price[findInterval(wgt, cutpoints)])
给予:
Order wgt price
1 01 22 75
2 02 5 50
3 03 35 135
4 04 25 135
笔记
dfmain <- data.frame(Order = c("01", "02", "03", "04"), wgt = c(22, 5, 35, 25),
stringsAsFactors = FALSE)
dfprice <- data.frame(wgt_intvl = c("0-15", "15-25", "25-50"),
price = c(50, 75, 135), stringsAsFactors = FALSE)
推荐阅读
- python - 创建一个修剪立方体 Pyglet 的平面
- python-3.x - Python Arduino 串口通讯不兼容问题
- html - 溢出-y 滚动,子溢出
- javascript - 如何使用 JQuery 的 parseXML 将转义字符串解析为 XML 对象?
- c# - 使用 ManagedDataAccess 将记录从 MS Access 表导入 Oracle 表的最快方法
- python - 如何使用自引用表在 SQLAlchemy 中编写查询?
- python - Jupyter 笔记本评论快捷方式不起作用
- php - PHP / SQL - 改进搜索功能/模糊搜索
- jquery - 将数组推入由ajax发送的serializeArray
- gnuplot - gnuplot中3D splot的不均匀网格间距