我使用以下代码尝试将低于底部 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_at
或mutate_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))
这将为您返回数据框,并根据需要修改所选/所有列/所有数字列。