我正在尝试随机化我的数据收集。我将观察10只动物(baboon_list
),每只动物进行4次(上午2点和下午2点)。所以总共有40个会话。
baboon_list=rep(c("Hound","Sunflower","Nick","Pompom",
"CrookedTail","Hugger","R","Chris","Puncture","Brown"),each=4)
session_vec=rep(c("AM","PM"),each=1,times=20)
sampling=data.frame(baboon_list,session_vec)
randomized_sampling=sampling[sample(nrow(sampling)),]
我希望随机观察他们的方式。我创建了一个随机数据框,但我希望它与交替的am和pm会话一起列出。也就是说,行应该是随机的,但是在交替的am和pm会话中排列。我怎么做?
目前,我将baboon_list
向量随机化,然后将其与session_vec
结合到一个解决了我目的的数据框中。
data.frame(sample(baboon_list),session_vec)
如果我得到这样的数据帧并且我必须重新排列它怎么样?我应该解构该数据框并使用我的方法重建吗? 很抱歉,如果这是一个微不足道的问题,我是R和统计数据的新手。
答案 0 :(得分:0)
从你的"排序"开始sampling
数据框,您可以执行以下操作。对于每只狒狒,从剩余的行中选择4个随机行(rr
)位置,并用随机行值标记这些狒狒行。然后从可用行(! rows %in% rr
)中删除行位置,并重复下一个狒狒。
baboons = levels(sampling$baboon_list)
rows = 1:nrow(sampling)
d = data.frame()
for (i in 1:length(baboons)) {
n = nrow(sampling[baboon_list=='R',])
rr = sort(sample(rows,n)) # 4 random row positions
d = rbind(d,
data.frame(sampling[baboon_list==baboons[i],], rr) )
rows = rows[! rows %in% rr] # remove the 4 row positions
}
subset(d, baboon_list=='Brown')
baboon_list session_vec rr
37 Brown AM 2
38 Brown PM 6
39 Brown AM 23
40 Brown PM 30
答案 1 :(得分:0)
一种简单的方法是使用gdata包中的函数interleave
。首先,您将数据框随机化,然后以交替顺序交织行:
set.seed(1)
df <- sampling[sample(nrow(sampling), 40), ]
library(gdata)
interleave(df[df$session_vec=="AM",], df[df$session_vec=="PM",])
输出:
baboon_list session_vec
11 Nick AM
22 Hugger PM
15 Pompom AM
34 Puncture PM
33 Puncture AM
8 Sunflower PM
21 Hugger AM