嗨,我如何在一个数据帧中子集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个随机子集,它们具有不同的行。
答案 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%
。