替换 R 中的异常值 2.5%、97.5% 代码错误



我使用以下代码尝试将低于底部 2.5% 和高于顶部 97.5% 的变量值替换为特定值。您可以执行该代码。它提供开放数据文件。

credit<-read.csv("http://freakonometrics.free.fr/german_credit.csv", header=TRUE)
fun <- function(x){
quantiles <- quantile( x, c(.025, .975 ) )
x[ x < quantiles[1] ] <- quantiles[1]
x[ x > quantiles[2] ] <- quantiles[2]
x
}
fun(credit)

但是出现错误消息。

Error in `[.data.frame`(x, order(x, na.last = na.last, decreasing = decreasing)) : 
undefined columns selected 

怎么了?我很乐意得到任何帮助!

+补充评论

我发现上述函数在数据框中不起作用,而仅在向量中起作用。

我可以使用以下代码更改数据文件中每个变量的异常值:

credit$Duration.of.Credit..month. <- pmax(quantile(credit$Duration.of.Credit..month.,.025), 
pmin(credit$Duration.of.Credit..month., quantile(credit$Duration.of.Credit..month.,.975)))

但是,我的数据文件变量太多,不方便一一输入代码。

那么如何更改特定值不是 pmax&pmin 的变量的异常值呢?

只要将函数应用于列,实际上就没有问题。我会使用 dplyr 包的mutate_atmutate_all(如果您真的想将其应用于所有列(。像这样:

library(dplyr)
credit_trunc <- credit %>% 
mutate_at(vars(Credit.Amount, Creditability), funs(fun))

credit_trunc <- credit %>%
mutate_all(funs(fun))

或者,如果您的数据框中还有其他类型的列(例如因子、字符(,则可以使用:

credit_trunc <- credit %>% 
mutate_if(is.numeric, funs(fun))

这将为您返回数据框,并根据需要修改所选/所有列/所有数字列。

最新更新