gpt4 book ai didi

r中的重复全向量采样

转载 作者:行者123 更新时间:2023-12-02 05:39:49 25 4
gpt4 key购买 nike

我有以下类型的数据

ntrt = paste ("EL", 1:4, sep= "")
repl = 3

我想从 ntrt 中采样,但是 3 次 (rep =3),输出如下所示:

nsam <- c(sample(ntrt),sample(ntrt), sample(ntrt)) 
repl <- rep (1:3, each = length (ntrt))
newd <- data.frame (nsam, repl)
newd
nsam repl
1 EL3 1
2 EL1 1
3 EL4 1
4 EL2 1

5 EL2 2
6 EL4 2
7 EL1 2
8 EL3 2

9 EL1 3
10 EL3 3
11 EL4 3
12 EL2 3

这是我的循环试验:

nsam <- rep (NULL, ntrt)
for (i in 1:rep){
nsam[i] <- sample(ntrt)
}

编辑:只是澄清

ntrt
[1] "EL1" "EL2" "EL3" "EL4"

> sample(ntrt,4)
[1] "EL4" "EL3" "EL2" "EL1"

# is equal to:
sample(ntrt)

but what I need:
c(sample(ntrt), sample(ntrt), sample(ntrt))

[1] "EL4" "EL3" "EL1" "EL2" "EL1" "EL2" "EL3" "EL4" "EL3" "EL1" "EL2" "EL4"

which is equal to
c(sample(ntrt,4), sample(ntrt,4), sample(ntrt,4))

enter image description here

因此流程是:

# for repl = 1
sample from ntrt size = length(ntrt)

# repeat the same process again
# for repl = 2
sample from ntrt size = length(ntrt)
# note: I only concerned with order of names within ntrt (randomization process)

# repeat the same process again
# for repl = 3
sample from ntrt size = length(ntrt)

same process for n levels of repl

我遇到了错误,很抱歉问了一个简单的问题

最佳答案

尝试使用 lapply:

set.seed(1) # Just so you can compare -- remove for your actual purposes
ntrt = paste ("EL", 1:4, sep= "")
repl <- rep (1:3, each = length (ntrt))
nsam = unlist(lapply(1:3, FUN=function(i) sample(ntrt)))
newd <- data.frame (nsam, repl)
# > newd
# nsam repl
# 1 EL2 1
# 2 EL4 1
# 3 EL3 1
# 4 EL1 1
# 5 EL1 2
# 6 EL3 2
# 7 EL2 2
# 8 EL4 2
# 9 EL3 3
# 10 EL1 3
# 11 EL4 3
# 12 EL2 3

更新

我注意到@joran 已经在评论中推荐了replicate。这是复制方法:

data.frame(nsam = as.vector(replicate(3, sample(ntrt))), repl)

关于r中的重复全向量采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11169827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com