使用mutate()、across()与Winsorize()缩尾处理数据时遇报错求助
问题解决:Winsorize()函数参数不匹配报错
错误原因
你使用的DescTools 0.99.58版本中,Winsorize()没有probs参数,该参数是后续版本新增的。你传入的probs属于未定义参数,触发了报错;na.rm参数是存在的,但由于probs的错误导致整体参数解析失败,因此被一同标记为未使用参数。
解决方案
根据你的需求(对drat、qsec列进行1%/99%缩尾处理),提供两种适配该版本的写法:
方案1:使用trim参数(适用于上下缩尾比例相同的场景)
trim参数指定单侧缩尾比例,设置为0.01即可同时修剪上下1%的极值:
library(tidyverse) library(DescTools) mtcars <- as_tibble(mtcars) mtcars <- mtcars %>% mutate(across(c(drat, qsec), ~Winsorize(., trim = 0.01, na.rm = TRUE)))
方案2:手动计算分位数后传入minval/maxval(适用于上下缩尾比例不同的场景)
如果需要自定义上下分位数比例,可先计算对应分位数,再传入minval和maxval指定缩尾阈值:
library(tidyverse) library(DescTools) mtcars <- as_tibble(mtcars) mtcars <- mtcars %>% mutate(across(c(drat, qsec), function(x) { # 计算1%和99%分位数 quantiles <- quantile(x, probs = c(0.01, 0.99), na.rm = TRUE) # 传入分位数作为缩尾阈值 Winsorize(x, minval = quantiles[1], maxval = quantiles[2], na.rm = TRUE) }))
内容的提问来源于stack exchange,提问作者Sharif
相关产品推荐
相关产品推荐

