R

时间:2016-05-16 15:45:50

标签: r sample

我尝试做的是使用R中的示例函数将一系列数字拆分成几个相等的部分供以后使用,但我很难在没有重复数字的情况下进行操作我表示我不想要替换值。

trials <- seq(1,21,1)
set.seed(5)
p1.trials <- sample(trials, 7, replace=F)
p1.trials

这产生载体:5,14,18,6,2,12,8,

trials <- trials[-p1.trials]
p2.trials <- sample(trials, 7, replace=F) 
p2.trials

这产生载体:19,20,3,7,9,4,16

p3.trials <- trials[-p2.trials]
p3.trials

这产生向量:1,3,9,10,13,16,17,19,20,21

任何人都可以帮我弄清楚为什么(a)我得到重复的值(例如,&#34; 3&#34;在p2.trials和p3.trials中)和(b)为什么p3 .trials子集产生10个数而不是7个

2 个答案:

答案 0 :(得分:1)

第一次有效,但是在第一次之后,每个试验成员的价值和每个试验成员的索引都不同,问题是使用-,而是使用setdiff:

trials <- seq(1,21,1)
set.seed(5)
p1.trials <- sample(trials, 7, replace=F)
p1.trials
trials <- setdiff(trials,p1.trials)

答案 1 :(得分:0)

只需使用sample函数一次随机化序列,然后将子集分成3个相等的组,就可以更有效地完成整个事情。

# Create data
trials <- seq(1,21,1)
set.seed(5)

# Randomize trials before subsetting 
random_order <- sample(1:21, replace=FALSE)
trials2 <- trials[random_order]

# Subset
p1.trials <- trials2[1:7]
p2.trials <- trials2[8:14]
p3.trials <- trials2[15:21]

# Check
p1.trials
##  5 14 18  6  2 12  8
p2.trials
##  16 13 17  4 21  3 10
p3.trials
##  20  7 19 11 15  9  1