来自组的样本,仅保留数据中的唯一观察值

时间:2018-04-16 09:51:58

标签: r random dplyr sample

我想每组采集一个样本,同时避免任何参与者在样本中出现两次(我需要这个用于受试者之间的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)

1 个答案:

答案 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