0

我有看起来像这样的数据。我想在给定标准偏差 ( 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)

正确的方法是什么?

4

1 回答 1

1

我首先建议你不要对如此庞大的数据集和如此大量nrnorm. 这使得browser在代码中抛出 a 并弄清楚发生了什么变得容易。首先,数据中的平均值是一个因素,因为您对格式化做了一些事情。

 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 ...

这必须在代码中解决。

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

densities <- apply(dat[1:10, 4:5], 1, function(x) {
        rnorm(n = 10, mean = as.numeric(x[2]), sd = as.numeric(x[1]))
    }
)
于 2012-04-30T13:58:59.983 回答