基于 R 中标准偏差的子集

use*_*055 1 r trim dataframe

我有一个数据框,它由每个观察的变量列组成,这些列是行。我需要修剪这些数据以删除不需要的观察结果。

我通常如何做到这一点 -

trimmed_stats <- ddply(.data = data, .(pos), subset,
                       !AvgGFP > 100 &
                       !AvgRFP > 60 &
                       !Area < 220 &
                       !Area > 2000 &
                       !DeviationsRFP > 20 &
                       !DeviationGFP > 20)
Run Code Online (Sandbox Code Playgroud)

...基本上删除不符合特定标准的数据。

但是,当我查看多个数据集时,这些特定数字会因数据集而异。

我想要做的是使用与平均值的标准偏差执行“修剪”。

例如,让我们采用一个简单的数据框,每个观察值都有一个变量 -

p <- data.frame(obs = c(1:1000), var1 = rnorm(1000, 0 , 5))
sd(p[,2])
[1] 4.91213
Run Code Online (Sandbox Code Playgroud)

所以 1 个标准差是 4.91213,如何删除 var1 不在均值 1 个标准差范围内的所有行?

flo*_*del 5

subset函数确实允许您使用计算值,因此您可以执行以下操作:

trimmed_stats <- ddply(.data = data, .(pos), subset,
                       abs(AvgGFP - mean(AvgGFP)) < sd(AvgGFP) &
                       ...)
Run Code Online (Sandbox Code Playgroud)

不要误会:在 内ddply,这些mean(AvgGFP)sd(AvgGFP)确实是为每个 计算的pos