Выберите сгруппированные случайные строки, измените значение в одном столбце

#r #dplyr

Вопрос:

Для моего дизайна исследования мне нужно выбрать в общей сложности 12 строк из каждой группы (10 групп) и изменить значение одного столбца с 0 на 1. Как бы я поступил с этим? Я уже пробовал sample_n, но тогда он выдает мне только случайно выбранные строки, а не весь набор данных.

 test <- test %>% group_by(group) %>% mutate(
  change_value = sample_n(12) 
) %>% ungroup()
 

Извини, что я застрял после этого.

Заранее спасибо

Комментарии:

1. Возможно, вы хотите iris %>% group_by(Species) %>% sample_n(5) %>% mutate(Sepal.Length = sample(0:1, size = n(), replace = TRUE))

Ответ №1:

Ваше требование не очень понятно.

случай-1 если вы хотите выбрать 12 случайных строк из каждой группы, измените значение одного столбца и верните весь набор данных.

 library(tidyverse)
set.seed(2021)
iris %>% group_by(Species) %>%
  mutate(Sepal.Width = ifelse(sample(1:n(), n()) <= 12, 1, Sepal.Width)) %>%
  ungroup()


# A tibble: 150 x 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
 1          5.1         1            1.4         0.2 setosa 
 2          4.9         3            1.4         0.2 setosa 
 3          4.7         3.2          1.3         0.2 setosa 
 4          4.6         3.1          1.5         0.2 setosa 
 5          5           1            1.4         0.2 setosa 
 6          5.4         1            1.7         0.4 setosa 
 7          4.6         3.4          1.4         0.3 setosa 
 8          5           3.4          1.5         0.2 setosa 
 9          4.4         1            1.4         0.2 setosa 
10          4.9         3.1          1.5         0.1 setosa 
# ... with 140 more rows