我有一个数据框,由每个观察的变量列组成,这些变量是行。我需要修剪这些数据以删除不需要的观察结果。
我通常如何做到这一点 -
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个标准偏差范围内的所有行?
答案 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的标准差的所有行。