我想每组采集一个样本,同时避免任何参与者在样本中出现两次(我需要这个用于受试者之间的ANOVA)。我有一个数据帧,其中一些参与者(不是全部)出现两次,每次出现在不同的组中,即彼得可以出现在组v1 = A和v2 = 1但理论上也在组v1 = B和v2 = 3。一个组由两个变量v1和v2定义,因此根据以下代码,有8个组。
现在,我希望避免数据中任何参与者的双重出现,方法是每组取样并随机取消任何参与者的一个观察,同时保持类似大小的样本。我构造了以下丑陋的代码来展示我的问题。
如何完成最后一步,以便没有参与者在样本中出现两次,我在所有样本中只有唯一的案例?
df1 < - data.frame(ID=c("peter","peter","chris","john","george","george","norman","josef","jan","jan","richard","richard","paul","christian","felix","felix","nick","julius","julius","moritz"),
v1=rep(c("A","B"),10),
v2=rep(c(1:4),5))
library(dplyr)
df2 <- df1 %>% group_by(v1,v2) %>% sample_n(2)
答案 0 :(得分:1)
您可以先按照“ID”,然后group_by
'v1'和'v2'取一个1号样本,然后再取另一个2号样本。
library(dplyr)
set.seed(1)
df2 <- df1 %>%
group_by(ID) %>%
sample_n(1) %>%
group_by(v1, v2) %>%
sample_n(2)
df2
# Groups: v1, v2 [4]
# ID v1 v2
# <fct> <fct> <int>
# 1 paul A 1
# 2 jan A 1
# 3 norman A 3
# 4 richard A 3
# 5 george B 2
# 6 peter B 2
# 7 moritz B 4
# 8 felix B 4