结合 tidyvese 中的 sample() 和 group_by()

Combining sample() and group_by() from tidyvese

下面,我试图随机 select 我的 data 中每个 study 值的行 group,如何?

嗯,我们首先 group_by(study),然后决定在每个 study 中选择 group 的行之一,基于:

group_row <- sapply(1:length(unique(data$study)), 
                     function(i)sample(0:2, 1, replace = TRUE))

对于 group_by(study) 中的每个 study

如果 group_row1,select group == 1study

如果 group_row2,select group == 2study

如果 group_row0,select study 的所有行。

我试过以下方法没有成功?

library(tidyverse)

(data <- expand_grid(study=1:3,group=1:2,outcome=c("A","B"), time=0:1) %>%
    as.data.frame())


lapply(1:2, function(i){
data %>% dplyr::group_by(group) %>% 
    filter(group == if(group_row[i] ==0) unique(data$group) else group_row[i]) %>% 
  dplyr::ungroup() %>% arrange(study,group,outcome,time)
})

您可以为每个 study 编写一个函数 select 一行,然后按组应用该函数。

library(dplyr)

return_rows <- function(x) {
  n <- sample(0:2, 1)
  #If n = 0 select all rows else 
  #select row for corresponding group
  if(n == 0) TRUE else x == n
}


data %>%
  group_by(study) %>%
  filter(return_rows(group)) %>%
  ungroup()