以R为阈值舍入数字

以R为阈值舍入数字,r,tidyverse,R,Tidyverse,我试着做逻辑回归,我得到了每个观测的概率。现在,我想在给定阈值的情况下,将概率分类为0或1 例如,如果我有两个数字0.65和0.87,我的阈值是0.7,我想将0.65四舍五入到0,将0.87四舍五入到1 为了实现这一点,我尝试了下面的代码,我认为对于这样一个简单的任务来说,这些代码太多了,我想知道是否有专门用于执行此任务的函数 library(tidyverse) # create a table of probabilities and predictions (0 or 1) df <

我试着做逻辑回归,我得到了每个观测的概率。现在,我想在给定阈值的情况下,将概率分类为0或1

例如,如果我有两个数字0.65和0.87,我的阈值是0.7,我想将0.65四舍五入到0,将0.87四舍五入到1

为了实现这一点,我尝试了下面的代码,我认为对于这样一个简单的任务来说,这些代码太多了,我想知道是否有专门用于执行此任务的函数

library(tidyverse)

# create a table of probabilities and predictions (0 or 1)
df <- tibble(
  prob = runif(20),
  pred = round(prob) # threshold = 0.5
)

# threshold function for length = 1
threshold_1 <- function(p,t) {
  if (p > t) 1 else 0
}

# threshold function for length = p
threshold_p <- function(ps, t) {
  map2_dbl(ps, t, threshold_1)
}

# below works.
df %>% mutate(
  pred = threshold_p(df$prob, 0.7)
)
上面的工作非常好,因为没有概率精确地为0或1(只要我们处理分布函数),所以即使I+/-0.5到数字(改变阈值),它们也永远不会四舍五入到-1或2。但这只是因为它不是很优雅


我想知道是否有任何函数可以以更简单的方式实现这一点?

听起来像是
如果其他
可以做你想做的事情

library(dplyr)
df %>% 
  mutate(pred = ifelse(prob < 0.7, 0, 1))
库(dplyr)
df%>%
突变(pred=ifelse(prob<0.7,0,1))
as.numeric(prob>0.7)
findInterval(prob,0.7)
?df%>%mutate(pred=if(prob<0.7)0 else 1)我尝试过这个方法,但我能知道为什么会返回错误吗?非常感谢。
library(dplyr)
df %>% 
  mutate(pred = ifelse(prob < 0.7, 0, 1))