子集数据帧的多个不同行

时间:2019-03-25 15:35:56

标签: r

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

我有df主要数据集。我需要2个主要数据集的子集。通过从主数据集中获取3个随机行,我得到了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个随机子集,它们具有不同的行。

3 个答案:

答案 0 :(得分:2)

如果要将数据分为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

答案 1 :(得分:0)

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

MongoClient.connect(url, function (err, datbase)

或者,如果我们需要创建训练/测试数据集,则可以使用f1 <- function(data, n) { data[sample(nrow(data), n),] }

split

答案 2 :(得分:0)

您也可以这样做-

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%