1

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

我通常是怎么做的-

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

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

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

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

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

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

所以 1 个标准差是 4.91213,我怎样才能删除 var1 不在平均值的 1 个标准差范围内的所有行?

4

3 回答 3

5

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

trimmed_stats <- ddply(.data = data, .(pos), subset,
                       abs(AvgGFP - mean(AvgGFP)) < sd(AvgGFP) &
                       ...)

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

于 2013-10-23T18:44:56.193 回答
3

使用data.table

library(data.table)
p <- data.table(p)
p[,ToKeep := abs(var1-mean(var1)) < sd(var1)][ToKeep  == TRUE]
于 2013-10-23T18:46:16.893 回答
-2

我是 R 新手。请尝试以下代码是否适合您的情况。

p_new <- p[which(p[,2] <= sd(p[,2])), ]

在 p_new 中,var1 大于平均值 1 个标准差的所有行都已被删除。

于 2013-10-23T18:46:19.570 回答