【问题标题】:Subset multiple different rows of a Data frame子集数据框的多个不同行
【发布时间】:2019-03-26 02:57:13
【问题描述】:

嗨,我如何在一个数据框中子集 2 个不同的 N 个随机样本。请参见下面的示例。

我有 df 主数据集。我需要主数据集的 2 个子集。通过从主数据集中获取 3 个随机行,我得到了 2 个子集。但是,我需要这 2 个子集彼此唯一。

> df = data.frame(matrix(rnorm(20), nrow=10))
> df
            X1          X2
1   0.19234071 -0.86702704
2  -0.18264853  1.75276062
3   0.75824257 -0.51314220
4  -0.84571563 -1.24841675
5   0.75470152  1.51408945
6   1.04546517  1.33292716
7  -0.51449011 -1.51275633
8   1.36014747  0.07400024
9  -0.02397481  0.17177997
10 -1.37967248 -0.50416489

df1 = df[sample(nrow(df), 3), ]
df1
           X1         X2
10 -1.3796725 -0.5041649
1   0.1923407 -0.8670270
4  -0.8457156 -1.2484167

df2 =  df[sample(nrow(df), 3), ]
df2
          X1         X2
3  0.7582426 -0.5131422
4 -0.8457156 -1.2484167
6  1.0454652  1.3329272

如您所见,随机子集 df1 和 df2 具有相同的行,即第 4 行。我需要数据帧的 2 个具有不同行的随机子集。

【问题讨论】:

  • split(head(df[sample(nrow(df)),]), 1:2)?

标签: r


【解决方案1】:

如果您想将数据拆分为 2 个不同的集合,您可以创建一个 index 并拆分帧,类似这样

set.seed(42)
idx <- sample(1:nrow(df), 3)
df1 <- df[idx, ]
df2 <- df[-idx, ]
df1
         X1        X2
10 1.359814 0.6919378
9  1.248144 0.9783253
3  1.903994 0.4371896
df2
          X1          X2
1 -0.3743900  0.54040310
2 -0.3204993  0.02383999
4 -0.2552918  0.94148533
5 -0.7327228 -1.25263998
6 -1.0648850  0.06567222
7 -0.2147909 -0.19137447
8  1.2148835  1.36361765

对于更复杂的拆分,请参阅caret::createDataPartition

【讨论】:

    【解决方案2】:

    如果我们需要重用相同的逻辑,我们可以创建一个函数

    f1 <- function(data, n) {
          data[sample(nrow(data), n),]
    }
    

    或者如果我们需要创建训练/测试数据集,我们可以使用split

    lst1 <- split(df,  seq_len(nrow(df)) %in% sample(nrow(df), 3))
    

    【讨论】:

      【解决方案3】:

      你也可以这样做-

      idx <- sample(seq(1, 2), size = nrow(df), replace = TRUE, prob = c(.8, .2))
      set1 <- df[idx == 1,]
      set2 <- df[idx == 2,]
      

      输出-

      > set1
                  X1         X2
      1  -0.85768451 -0.1545485
      2  -0.76420259  1.2054883
      3  -0.91973457  1.4867429
      6  -1.07558176  0.2527374
      7   0.03189408  1.4057502
      8   0.64270649  1.3742131
      9   1.59246097 -0.3845688
      10 -0.14158552 -1.5792062
      
      > set2
                X1         X2
      4 -0.6317524 0.06571271
      5  0.5005460 0.46277511
      

      注意**- 您可以在 sample 函数中更改拆分百分比。我用过80-20%

      【讨论】:

        猜你喜欢
        • 2019-09-10
        • 2018-01-04
        • 2015-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-30
        • 1970-01-01
        相关资源
        最近更新 更多