【发布时间】:2016-05-30 16:52:42
【问题描述】:
我尝试创建一个函数来将异常值注入现有数据框。
我开始使用原始数据框的max和min值创建一个新的数据框outs。这个outs 数据框将包含某个amountof 异常数据。
稍后我想将outs 数据帧的异常值注入原始数据帧。
我想要获得的是向原始数据帧注入一定数量异常值的函数。
我有不同的问题,例如:我知道我是否正确使用 runif 来创建异常值的数据框,其次我不知道如何将异常值注入temp
到目前为止我尝试过的代码是:
addOutlier <- function (data, amount){
maxi <- apply(data, 2, function(x) (mean(x)+(3*(sd(x)))))
mini <- apply(data, 2, function(x) (mean(x)-(3*(sd(x)))))
temp <- data
amount2 <- ifelse(amount<1, (prod(dim(data))*amount), amount)
outs <- runif(amount2, 2, min = mini, max = maxi) # outliers
if (amount2 >= prod(dim(data))) stop("exceeded data size")
for (i in 1:length(outs))
temp[sample.int(nrow(temp), 1), sample.int(ncol(temp), 1)] <- outs
return (temp)
}
请任何帮助完成这项工作,将不胜感激
【问题讨论】:
-
我不确定我是否理解您的目标,但我认为您的代码中存在错误。
runif(n, mini, maxi)将为您提供介于您定义的两个极端之间的n值。它不太可能是异常值,当然也不能保证是异常值。 -
@Alex 我看到了问题,任何关于我如何保证有异常值的建议
-
您还没有明确定义“异常值”是什么意思......显然
runif(n, -Inf, mini)、runif(n,maxi, Inf)会起作用,但这可能不现实。 -
不!你绝对不应该不抓住别人的答案并声称它是你自己的而不署名......你的编辑也没有解决我提出的问题。