【发布时间】:2014-02-07 17:04:33
【问题描述】:
我需要一种将异常值替换为 -9999 的方法。在我的数据中,-9999 表示缺少该值。这只是通常用于此类数据的约定,而不是 NA
我有一个名为 amf 的数据框,它有 43 列。我需要逐列并用 -9999 替换 99 个百分位以上和 1 个百分位以下的每个值。我需要跳过一些列,例如一年中的某一天。
我尝试过以各种方式使用 apply 和 lapply 函数,但我一定是错误地使用了它们。这是我尝试过的
amf_out <- apply(amf[,4:43],2, which(amf[,4:43] > quantile(amf[,4:43, .99)))
amf_out <- lapply(1:length(amf), function(i) amf[which(amf[,i] > quantile(amf[,1],.99))] <-
-9999)
amf[which(amf[,4:43] > quantile(amf[,4:43], .99))] <- -9999
这些都没有奏效。有什么建议吗?
【问题讨论】:
-
您这样做的理由是什么?根据您的设置/数据,这可能是非常不道德的。
-
我同意 rawr。如果您想删除异常值,您至少应该使用适当的异常值测试。但是,您根本不应该这样做。
-
这是来自气象仪器的数据。有时,仪器可能会发生故障并记录超出可接受范围的值,例如温度为 1000 C。任何明显不可接受的值都需要设置为一个指定缺失值的值。
-
但是你不应该根据分位数来做这个,而是定义一个气象上可能的温度范围。
-
去除极值的更好功能是什么?