结合 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_row
是 1
,select group == 1
行 study
。
如果 group_row
是 2
,select group == 2
行 study
。
如果 group_row
是 0
,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()
下面,我试图随机 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_row
是 1
,select group == 1
行 study
。
如果 group_row
是 2
,select group == 2
行 study
。
如果 group_row
是 0
,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()