【问题标题】:Subsetting based on standard deviation in R基于 R 中的标准差的子集
【发布时间】:2013-11-02 04:56:54
【问题描述】:

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

我通常是怎么做的 -

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

【问题讨论】:

    标签: r dataframe trim


    【解决方案1】:

    subset 函数确实允许您使用计算值,因此您可以这样做:

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

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

    【讨论】:

      【解决方案2】:

      使用data.table

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

      【讨论】:

        【解决方案3】:

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

        p_new &lt;- p[which(p[,2] &lt;= sd(p[,2])), ]

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

        【讨论】:

          猜你喜欢
          • 2021-08-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-25
          • 2018-04-23
          • 1970-01-01
          • 2018-01-24
          • 2022-11-27
          • 1970-01-01
          相关资源
          最近更新 更多