给定平均值和标准偏差的最大和最小密度

时间:2012-04-30 13:43:22

标签: r plot

我的数据看起来像这样。 我想找到最大和最小密度 给出下面的标准差(SD)和均值(MEAN)列表:

info0 info1 info2 SD Mean
10x     0       e0      0.38    1.14
10x     0       e2      0.74    1.48
10x     0       e4      1       1.85
10x     0       e6      1.24    2.27
10x     0.1     e0      0.35    1.13
10x     0.1     e2      0.69    1.44
10x     0.1     e4      0.96    1.82
10x     0.1     e6      1.21    2.23
10x     0.5     e0      0.34    1.12
10x     0.5     e2      0.67    1.4
10x     0.5     e4      0.95    1.75
10x     0.5     e6      1.19    2.17
10x     1       e0      0.29    1.09
10x     1       e2      0.59    1.32
10x     1       e4      0.87    1.66
10x     1       e6      1.11    2.06
10x     2       e0      0.23    1.06
10x     2       e2      0.5     1.24
10x     2       e4      0.79    1.54
10x     2       e6      1.04    1.9
10x     4       e0      0.22    1.0.5
10x     4       e2      0.41    1.15
10x     4       e4      0.65    1.37
10x     4       e6      0.91    1.7

我尝试了但却失败了。

dat <- read.table("test.dat", header = TRUE)
densities <- apply(dat[, 4:5], 1, function(x) rnorm(n = 1000000, mean = x[2], sd = x[1]))

maxden <- max(densities)
minden  <- min(densities)

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

首先,我建议您不要在n中对如此庞大的数据集和如此大量的rnorm进行操作。这样可以很容易地在代码中抛出browser并找出正在发生的事情。首先,数据中的均值是一个因素,因为你对格式化做了些什么。

 str(dat)
'data.frame':   24 obs. of  5 variables:
 $ info0: Factor w/ 1 level "10x": 1 1 1 1 1 1 1 1 1 1 ...
 $ info1: num  0 0 0 0 0.1 0.1 0.1 0.1 0.5 0.5 ...
 $ info2: Factor w/ 4 levels "e0","e2","e4",..: 1 2 3 4 1 2 3 4 1 2 ...
 $ SD   : num  0.38 0.74 1 1.24 0.35 0.69 0.96 1.21 0.34 0.67 ...
 $ Mean : Factor w/ 24 levels "1.0.5","1.06",..: 6 13 19 24 5 12 18 23 4 11 ...

必须在代码中解决。

现在我们可以看到使用代码来获得我们想要的东西(你需要调整n in rnorm并在实际使用时为代码提供更多行,但出于测试目的,这是理想的):

densities <- apply(dat[1:10, 4:5], 1, function(x) {
        rnorm(n = 10, mean = as.numeric(x[2]), sd = as.numeric(x[1]))
    }
)