1

我有一个大数据集,我想创建原始数据集的 3 个随机选择(大小 = 50)子集。我只想从特定列(具体为第 13 列)中提取分数。

这在R中一定很容易做到,我应该怎么做?

4

2 回答 2

6
replicate(3, sample(200, 50))

200数据框中的行数在哪里(相应调整)。更自动地,假设数据在对象中df

replicate(3, sample(nrow(df), 50))

这是一个例子

set.seed(10)
df <- data.frame(x1 = rnorm(1000), x2 = rnorm(1000))

ind <- replicate(3, sample(nrow(df), 50))
head(ind)

> head(ind)
     [,1] [,2] [,3]
[1,]  380  220  702
[2,]   75  751  720
[3,]  775  278  153
[4,]  988  612  340
[5,]  282  568  925
[6,]  266  794  812

这些列包含您想要的 3 个子集。然后您可以使用它来索引原始数据框,例如

df[ind[,1], "x2"]

> df[ind[,1], "x2"]
 [1]  0.57982435  0.27016645 -0.08435526  1.16768142  1.38124150  0.62444167
 [7] -0.54887437  1.91301831  1.84116197  0.94045377 -1.15417235 -0.06809104
[13] -2.03652525  1.06773801 -0.34235315 -0.24707548 -1.80470122  0.11993674
[19] -0.36358182  0.16819156 -1.84507669 -0.16707925 -1.80789383  0.78894210
[25] -0.05741295 -0.28905260  2.38724835  2.75762831 -0.18082554  1.61820620
[31] -0.48192569 -0.03298339  0.52087746  0.32774925  1.52103207 -0.15619668
[37] -0.49687983 -0.06623606  2.21855213 -0.48727519  1.01115806  0.25213485
[43]  1.01927105  0.31362619  0.40260968  0.26795767  0.01803656  0.19579576
[49] -0.26464131  0.48141105

其中我取第一个子集和唯一变量x2

请注意,这假设您要在不更换的情况下进行采样;换句话说,每一行只能df在一个子集中出现 0 次或 1 次,而不是多次。如果您想要后者,请参阅 中的论点。replace?sample

于 2013-04-17T03:31:32.247 回答
1

@Gavin 解决方案很好,但它可能会生成具有非空交集的子集。我的解决方案保证每一行最多在一个子集中。

k <- 3
x <- sample(nrow(df), 50*k, replace = FALSE) 
split(x, ceiling(seq_along(x)/50))
$`1`
 [1] 595 392 370 504 494 167 633 264 648 465 757 566 914 406 104 486 965 360 426 724 442 583
[23] 252 732 588 513  76 514 142 843 923 806 540 470 128 356  20 391 117 879 185 977 849 820
[45] 174 170 157 737 692 308

$`2`
 [1]  48 207   7 415 850 777 525  85 389 440 503 459 718 455 865 108 453 810 864 608 567 184
[23] 731 954 575 579 784 795 435 898 106  53 450 841 916 768  26 919 860 502 858 481 225 303
[45] 272 646  49 422 803 320

$`3`
 [1] 596 447 516 789 948 893 218 838 100 493 958 410 353 982  93 581 188 822 660 230 696 891
[23] 892 368 161 786  50 326 984 944 478 483 690 776 642 522 203 475 325 449 305 134 463 582
[45] 432 548 759   1 578 825
于 2015-03-27T12:00:36.477 回答