2017-10-28 59 views
0

如何使用NA识别和替换数据框中的超范围数据?如何使用NA识别和替换数据框中的超范围数据?

我目前使用下面的代码来识别使用盒图的异常值,然后手动确定哪些异常值超出范围(例如,比例是1-4,数据点是负值)并删除它们。

>boxplot(data$scale1, data = data) 
>outliers <- boxplot(cw$N, plot=FALSE)$out 
>outliers 
>data$scale1[data$scale1==-7.58] <- NA 

我手动这样做对每一个变量,因为它们都具有不同的截止点是超出了范围,我想知道如果有一个更简单的方法来做到这一点?

感谢

+0

您的数据是否遵循某种趋势?如果数据点遵循某种特定趋势,那么您可以拟合趋势,并将远离趋势的数据点视为异常值。 – Heikki

+0

您可以将截断值写入数据框并将其应用于每个变量。 @ Heikki:我没有看到这种方法适合的场景 –

+0

谢谢! @tobiasegli_te听起来像我之后,我只是不确定如何做到这一点,如果每个变量有不同的截点,你有什么建议吗? – Shep

回答

0

只是跟着你可以去下面的方式点评:

# Make up some data 
data <- data.frame(scale1=(c(0,-1,2,4,3,2,1,1,8,5))) 

# Define scale min and max 
scale1.min <- 0 
scale1.max <- 4 

# Set NAs for Outliers 
data$scale1[data$scale1 < scale1.min | data$scale1 > scale1.max] <- NA 

正如托比亚斯已经指出的那样,你可以很容易地为多个变量这样做:

# Again make up some data 
data <- data.frame(scale1=(c(0,-1,2,4,3,2,1,1,8,5))) 
data["scale2"] <- data$scale1 - 1 
data["scale3"] <- data$scale1 + 2 
data["scale4"] <- data$scale1 + 5 

# Define your cut off points 
scale.min <- c(0,-1,2,3) 
scale.max <- c(4,2,4,8) 

for(i in 1:length(scale.min)) 
{ 
    data[,i][data[,i] < scale.min[i] | data[,i] > scale.max[i]] <- NA 
} 

希望这有助于。

相关问题