#r #dataframe #function #random #dplyr
Вопрос:
Мне было интересно, есть ли способ заставить мои expand.grid()
выходные данные отображать неравные строки для каждого уникального study
значения (в настоящее время каждое уникальное study
значение имеет 4 строки)?
Например, можем ли мы случайным образом выбрать некоторые или все строки study == 1
, некоторые или все строки study == 2
и некоторые или все строки study == 3
?
Количество строк, выбранных из каждого исследования, является абсолютно случайным.
Это игрушечное исследование, приветствуется функциональный ответ.
library(dplyr)
(data <- expand.grid(study = 1:2, outcome = rep(1:2,2)))
arrange(data, study, outcome)
# study outcome
#1 1 1
#2 1 1
#3 1 2
#4 1 2 #--- Up to here study == 1
#5 2 1
#6 2 1
#7 2 2
#8 2 2 #--- Up to here study == 2
#9 3 1
#10 3 1
#11 3 2
#12 3 2 #--- Up to here study == 3
Комментарии:
1. Как вы определяете случайность для каждого
study
из них ? Можете ли вы показать некоторые примеры входных данных и соответствующие выходные данные для функции, которую вы ожидаете?2. @RonakShah, это тоже случайность. Вы можете выбрать все строки или несколько существующих строк исследования.
Ответ №1:
Вы можете sample
n()
для каждого study
и выбрать 1 случайное значение.
library(dplyr)
data %>% group_by(study) %>% sample_n(sample(n(), 1)) %>% ungroup
Комментарии:
1. Похоже, жизненный цикл
sample_n()
семьи был заменен. Можем ли мы использоватьslice_sample()
вместо этого?2. Нет.
slice_sample
необходимоn
илиprop
должно быть исправлено, и они не могут быть динамичными в разных группах. Я поднял вопрос в прошлом году github.com/tidyverse/dplyr/issues/5478 об этом, но уdplyr
разработчиков на этот счет другое мнение.
Ответ №2:
Если я правильно понял, это должно сработать
data %>%
#Grouping by the variable study
group_by(study) %>%
#Sampling 3 observations for each study
sample_n(size = 3)