r - 查找位于其他 DataFrame 上的两列值之间的 DataFrame 的值
问题描述
我有两个数据框。dataframe_A 包含用户和给定值:
dfA <- structure(list(User = 1:5, Value = c(54L, 12L, 7L, 123L, 74L)),
row.names = c(NA, -5L), class = "data.frame")
dfA
#> User Value
#> 1 1 54
#> 2 2 12
#> 3 3 7
#> 4 4 123
#> 5 5 74
dfB 包含值范围和我想添加到 dfA 的乘数:
dfB <- structure(list(Min = c(0L, 50L, 80L, 100L, 120L),
Max = c(50L, 80L, 100L, 120L, 1000L),
Mult = c(0, 0.5, 0.8, 1, 1.2)),
class = "data.frame", row.names = c(NA, -5L))
dfB
#> Min Max Mult
#> 1 0 50 0.0
#> 2 50 80 0.5
#> 3 80 100 0.8
#> 4 100 120 1.0
#> 5 120 1000 1.2
所以想要的结果是将 dfB 中的乘数添加到 dfB:
dfA
User Value Mult
[1] 1 54 0.5
[2] 2 12 0
[3] 3 7 0
[4] 4 123 1.2
[5] 5 74 0.5
我已经尝试过这段代码(它适用于单个值),但在数据框中不起作用:
dfA$Mult <- print(subset(dfB, dfA$Value > dfB$Min & dfA$Value < dfB$Max)$Mult)
提前致谢!
解决方案
如果间隔 indfB
形成更大范围的分区,如示例中那样按顺序间隔将其切割,我们还可以使用findInterval
orcut
将 in 的值匹配到 indfA
的间隔dfB
。与findInterval
:
findInterval(x = dfA$Value, vec = c(dfB$Min[1], dfB$Max))
#> [1] 2 1 1 5 2
结合在 中创建一个新Mult
列dfA
,我们可以这样写:
dfA$Mult <- with(dfB, Mult[findInterval(x = dfA$Value, vec = c(Min[1], Max))])
dfA
#> User Value Mult
#> 1 1 54 0.5
#> 2 2 12 0.0
#> 3 3 7 0.0
#> 4 4 123 1.2
#> 5 5 74 0.5
免责声明:findInterval
如果间隔不能很好地排列,则使用会变得更加乏味dfB
,在这种情况下,Ronak 的方法可能更直接。
推荐阅读
- shell - linux 显示来自 ls 命令的第一个文件的头
- java - 我将如何为每个通话记录实现删除功能?
- javascript - shadow-root 元素中的 Accesskey 在 Firefox 中不起作用
- javascript - 仅数字验证在离子应用程序中不起作用
- reactjs - 仅为已部署的 React 应用程序获取“TypeError:this.state.users.map 不是函数”
- python - 我怎样才能提高“这是一条直线吗?”的表现?算法?
- r - 闪亮的应用程序非常慢和 RegData 错误,代码中的什么可能导致这种情况?
- mysql - SQL 语法错误,请查看手册
- cryptography - 在 micro-ecc 中的 uECC_make_key 方法中使用自定义的随机数生成密钥对 - Riot OS
- linux - Linux,存储文件的 CPU 架构