我使用以下代码尝试使用特定值替换低于底部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&amp; pmin的变量的异常值呢?
答案 0 :(得分:0)
只要将其应用于列,您的功能实际上没有任何问题。我会使用mutate_at
或mutate_all
(如果您确实要将其应用于dplyr包的所有列)。像这样:
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))
这将返回数据框,其中所选/所有列/所有数字列都已根据需要进行了修改。