Подмножество нескольких разных строк фрейма данных - PullRequest
1 голос
/ 25 марта 2019

Привет. Как я могу подмножество 2 разных N случайных выборок в кадре данных. Смотрите пример ниже.

У меня есть основной набор данных. Мне нужно 2 подмножества основного набора данных. Я получил 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 ]

2 голосов
/ 25 марта 2019

Если вы хотите разделить данные на 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

0 голосов
/ 25 марта 2019

Вы также можете сделать что-то вроде этого -

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

0 голосов
/ 25 марта 2019

Мы можем создать функцию, если нам нужно повторно использовать ту же логику

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

Или если нам нужно создать набор данных поезда / теста, мы можем использовать split

lst1 <- split(df,  seq_len(nrow(df)) %in% sample(nrow(df), 3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...