【发布时间】:2021-11-27 02:56:22
【问题描述】:
基本上,我在堆栈中有一个时间序列的栅格。这是我的工作流程:
将堆栈转换为数据帧,这样每一行代表一个像素,每一列代表一个数据。这个过程相当简单,所以这里没有问题。
对于每一行(像素),识别异常值并将它们设置为 NA。所以在这种情况下,我想设置异常值是什么。例如,假设我想将所有大于第 75 个百分位的值设置为 NA。目标是当我计算平均值时,异常值不会影响计算。在这种情况下,异常值要高几个数量级,因此它们会显着影响平均值。
我在网上得到了一些帮助并想出了这个代码:
my_data %>%
rowwise() %>%
mutate(across(is.numeric, ~ if (. > as.numeric(quantile(across(), .75, na.rm=TRUE))) NA else .))
问题在于,由于它是一个栅格,因此在某些行中有很多 NA 值,我需要分位数函数在计算评估单元格时忽略这些值(见下文)
使用na.rm=TRUE 似乎是解决方案,但现在我遇到了一个新错误
错误:
mutate()输入..1有问题。我..1 = across(...)。 X 需要 TRUE/FALSE 的缺失值 i 错误发生在第 1 行。
我知道要解决这个问题,如果它是 NA,我需要告诉 if 函数忽略该值,但是 dplyr 语法对我来说非常复杂,所以我需要一些关于如何做到这一点的帮助。
期待学习更多,如果有更好的方法来做我想做的事。我认为我没有很好地解释它,但希望代码有所帮助。
【问题讨论】:
-
你能与
dput()分享数据框吗?它使每个人的事情变得更容易。更多详情:stackoverflow.com/questions/5963269/…
标签: r dplyr time-series raster outliers