我处理的其中一个数据集很奇怪。我从中下载数据的数据仓库在其中一个变量中有很多 999999999 值。显然,数据仓库所在的计算机系统不支持存储空值。所以他们使用 999999999 作为“空”值。现在,如果我只是pretty在 R 中运行变量,它会给出无意义的范围。
- 是否有一个软件包
pretty可以通过将异常值置于 (100,High) 范围内来处理异常值?
我处理的其中一个数据集很奇怪。我从中下载数据的数据仓库在其中一个变量中有很多 999999999 值。显然,数据仓库所在的计算机系统不支持存储空值。所以他们使用 999999999 作为“空”值。现在,如果我只是pretty在 R 中运行变量,它会给出无意义的范围。
pretty可以通过将异常值置于 (100,High) 范围内来处理异常值?如果您使用类似命令导入数据,例如,
read.table('yourfile.txt', header=TRUE, ...)
您可以NA通过指定na.strings = "999999999". 我们也可以考虑不同的值来表示NA值。考虑以下文件 ( fake.txt),我们要在其中处理“.”。和“999999999”作为NA值:
1 2 .
3 999999999 4
5 6 7
然后在R中我们会这样做:
> a <- read.table("fake.txt", na.strings=c(".","999999999"))
> a
V1 V2 V3
1 1 2 NA
2 3 NA 4
3 5 6 7
否则,您始终可以按照@Sacha 在他的评论中的指示过滤您的数据。在这里,它可能是这样的
a[a=="." | a==999999999] <- NA
编辑
如果在具有不同值的不同列中可能观察到多个异常值,但您知道允许值的可能范围,则可以对每一列应用一个函数。例如,定义以下过滤器:
my.filter <- function(x, threshold=100) ifelse(x > threshold, NA, x)
然后
a.filt <- apply(a, 2, my.filter)
将矩阵中所有大于 100 的值替换为 NA a。
例子:
> a <- replicate(10, rnorm(10))
> a[1,3] <- 99999999
> a[5,6] <- 99999999
> a[8,10] <- 99999990
> summary(a[,3])
Min. 1st Qu. Median Mean 3rd Qu. Max.
-1e+00 0e+00 0e+00 1e+07 1e+00 1e+08
> af <- apply(a, 2, my.filter)
> summary(af[,3])
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-1.4640 -0.2680 0.4671 -0.0418 0.4981 0.7444 1.0000
它当然可以是基于向量的:
> summary(my.filter(a[,3], 500))
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-1.4640 -0.2680 0.4671 -0.0418 0.4981 0.7444 1.0000
在处理客户每日时间序列数据时,我经常遇到这种情况。似乎许多会计系统忽略了没有发生的日常数据,即当天没有记录交易(时间间隔/桶)并且不填写“0”数字。由于时间序列分析需要读取每个时间间隔/bucket 我们需要为省略的观察注入一个“0”。干预检测本质上是一种检测异常的方案,并根据已识别的配置文件/信号/预测将其替换为预期值。如果这些“缺失”中有很多值”系统可能会崩溃 当历史数据中有很强的星期几配置文件并且没有记录“连续的值补丁”时,问题会变得更加复杂,