基于R中的标准偏差进行子集

时间:2013-10-23 18:38:15

标签: r dataframe trim

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

我通常如何做到这一点 -

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个标准偏差范围内的所有行?

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:3)

使用data.table

library(data.table)
p <- data.table(p)
p[,ToKeep := abs(var1-mean(var1)) < sd(var1)][ToKeep  == TRUE]

答案 2 :(得分:-2)

我是R.的新手。请尝试以下代码适用于您的情况。

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

在p_new中,已删除var1大于1的标准差的所有行。