如何在 R 中重复 downSample?

How to repeat downSample in R?

我不确定该用什么方法来解决这个问题(我对 R 和统计分析都不熟悉)。我的数据集中有一个高度不平衡的 class:


  PCL_Sum     n
*     <dbl> <int>
1         0   300
2         1    25

我意识到我可以对这些数据使用 downSample 来获得一个平衡集,其中包含 25 个随机选择的 0 和我现有的 25 个 1。但是,我想重复此过程 12 次,以便使用我所有的“0”数据,留下 12 组数据。

我知道我可以手动执行此操作 12 次,但我想使该过程自动化。有人可以给我一个关于他们将如何解决这个问题的总体思路吗?我意识到那里可能有答案,但我无法理解我找到的文档。谢谢!

downSample有什么不好的地方吗?看起来你可以只应用 12 次,然后从那里开始你的样品。这是一个例子。

data(oil)
table(oilType)
downSample(fattyAcids, oilType)
mysamples <- lapply(1:12, function(x){downSample(fattyAcids, oilType)})

然后你可以调用mysamples[[1]]第一组等等。

> mysamples[[1]]
   Palmitic Stearic Oleic Linoleic Linolenic Eicosanoic Eicosenoic Class
1      11.5     5.1  27.8     54.5       0.2        0.4        0.1     A
2      11.4     5.8  34.5     48.3       1.0        0.1        0.1     A
3       6.1     4.1  24.0     64.3       0.1        0.3        0.1     B
4       6.1     4.1  26.7     61.0       0.6        0.3        0.2     B
5       9.7     3.4  59.3     20.5       0.1        1.5        1.2     C
6       9.6     3.3  57.7     20.7       0.2        1.5        1.8     C
7       9.3     2.8  65.0     17.0       3.9        0.5        0.7     D
8      10.9     2.7  76.7      7.9       0.8        0.1        0.1     D
9      10.9     3.6  26.0     52.6       5.5        0.4        0.2     E
10     10.5     4.2  24.4     52.1       7.5        0.4        0.1     E
11      5.4     2.0  53.2     28.9       7.3        0.6        1.3     F
12      5.1     2.3  55.9     27.4       6.8        0.5        0.5     F
13     10.0     2.3  36.9     47.1       2.2        0.5        0.5     G
14     10.7     1.8  30.2     55.5       0.9        0.5        0.3     G
> mysamples[[2]]
   Palmitic Stearic Oleic Linoleic Linolenic Eicosanoic Eicosenoic Class
1      13.0     6.2  25.8     55.0       0.8        0.1        0.1     A
2      13.1     5.7  31.7     49.5       0.6        0.1        0.1     A
3       5.6     4.2  25.7     58.9       1.7        2.8        0.9     B
4       6.1     4.1  24.0     64.3       0.1        0.3        0.1     B
5       9.6     3.3  57.7     20.7       0.2        1.5        1.8     C
6      10.0     3.3  60.0     21.3       0.2        1.5        1.3     C
7       9.3     2.8  65.0     17.0       3.9        0.5        0.7     D
8      14.9     2.6  68.2     12.8       0.6        0.4        0.3     D
9      10.9     3.6  26.0     52.6       5.5        0.4        0.2     E
10      9.7     3.9  25.1     54.2       5.9        0.1        0.1     E
11      5.1     2.3  55.9     27.4       6.8        0.5        0.5     F
12      5.5     1.7  59.0     21.3       9.3        0.6        1.5     F
13     10.7     1.8  30.2     55.5       0.9        0.5        0.3     G
14     10.0     2.3  36.9     47.1       2.2        0.5        0.5     G

针对独特样本进行编辑:

df <- data.frame(class = c(rep("A", 25), rep("B", 300)),
                 value = 1:325)
mysamples <- lapply(1:12, function(x){df[c(1:25, (x * 25 + 1) : ((x+1) * 25)), ]})

这将取样本 1 中多数 class 的前 25 个,样本 2 中接下来的 25 个,等等,直到第 12 个样本。

我们也可以使用replicate

library(caret)
out <- replicate(12, downSample(fattyAcids, oilType), simplify = FALSE)