gpt4 book ai didi

r - 来自键值表的动态 if-else "tests"或 case_when "formulas"?

转载 作者:行者123 更新时间:2023-12-04 09:41:36 25 4
gpt4 key购买 nike

我正在尝试在 R 中编写一个函数它使用分位数断点的“键值”data.frame 返回基于输入值落入的分位数的权重。以下是这些 data.frames 之一的示例:

key1 <- data.frame(Boundary = c(0.01, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 
0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.22),
Weight = c(0,1, 3.5, 8, 15, 25, 37.5, 51.5, 65, 76.5, 85.5,
91.5, 95, 97.5,99, 100))

我可以使用硬编码解决方案实现我想要的输出,但我想要一个可以处理不同“键值”data.frames 的动态解决方案。

这是我的硬编码解决方案:
library(dplyr)

val_vec <- c(0.099, 0.181, 0.134)

getWeight <- function(val){

w <- dplyr::case_when(
val < 0.04 & val >= 0.00 ~ 0.0,
val < 0.05 & val >= 0.04 ~ 1.0,
val < 0.06 & val >= 0.05 ~ 3.5,
val < 0.07 & val >= 0.06 ~ 8.0,
val < 0.08 & val >= 0.07 ~ 15.0,
val < 0.09 & val >= 0.08 ~ 25.0,
val < 0.10 & val >= 0.09 ~ 37.5,
val < 0.11 & val >= 0.10 ~ 51.5,
val < 0.12 & val >= 0.11 ~ 65.0,
val < 0.13 & val >= 0.12 ~ 75.5,
val < 0.14 & val >= 0.13 ~ 85.5,
val < 0.15 & val >= 0.14 ~ 91.5,
val < 0.16 & val >= 0.15 ~ 97.5,
val < 0.17 & val >= 0.16 ~ 99.0,
val <= 0.22 & val >= 0.17 ~ 100.0)

return(w)
}

getWeight(val_vec)


我试图编写一个动态解决方案,但经过多次修补后,我无法让它提供正确的权重。
getWeight_Dynamic <- function(val, k = key1){

qb <- c(0, k[["Boundary"]])
w <- c()

for(b in 1:length(qb)){

if(val < qb[b+1] && val >= qb[b] ){
w <- k[b-1, 2]
}
}
return(w)
}

sapply(val_vec, getWeight_Dynamic)

有人可以提供一种动态分配权重的方法,而无需繁琐的硬编码吗?

为了测试,这里是第二个示例键值数据框。我正在寻求的解决方案应该同时适用于 key1key2 .谢谢。
key2 <- data.frame(Boundary = c(0.1, 0.16, 0.17, 0.18, 0.19, 0.2, 0.21, 0.22, 
0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.3,
0.31, 0.32, 0.33, 0.330200000000004, 0.35, 0.42),
Weight = c(0, 1, 2, 4, 7, 11, 16.5, 23.5, 32, 41.5, 51, 60,
69, 77, 83.5, 89, 93, 95.5, 97, 98, 99, 100))

最佳答案

FindInterval会做的伎俩,看看options精确设置限制:

getWeight <- function(x,key){
key$Weight[findInterval(x,key$Boundary)]
}
getWeight(0.14,key1)
[1] 91.5

关于r - 来自键值表的动态 if-else "tests"或 case_when "formulas"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62308304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com