从组中随机选择值序列

问题描述 投票:0回答:1

数据如下:

df <-
  data.frame(group = c(1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4),
             value = LETTERS[1:20])

我需要使用

dplyr
从每组中随机选择四个值的序列。所选值的顺序应与数据中的顺序相同,并且它们之间不应有间隙。

期望的结果可能如下所示:

   group value
1      1     A
2      1     B
3      1     C
4      1     D
6      2     F
7      2     G
8      2     H
9      2     I
11     3     K
12     3     L
13     3     M
14     3     N
17     4     Q
18     4     R
19     4     S
20     4     T

   group value
1      1     A
2      1     B
3      1     C
4      1     D
5      2     E
6      2     F
7      2     G
8      2     H
10     3     J
11     3     K
12     3     L
13     3     M
17     4     Q
18     4     R
19     4     S
20     4     T

这就是我解决这个问题的地方:

set.seed(23)
df %>% 
  group_by(group) %>% 
  mutate(selected = sample(0:1, size = n(), replace = TRUE)) %>% 
  filter(selected == 1)

但是,我不知道如何连续生成 4 个 1,并且在它们之前或之后都有零。

r dplyr random
1个回答
0
投票

我们可以

sample
组中的行数(减三),调整大小,然后添加
0:3
以选择我们保留的行。

set.seed(42)
df %>%
  group_by(group) %>%
  filter(row_number() %in% c(sample(max(1, n()-3), size=1) + 0:3)) %>%
  ungroup()
# # A tibble: 16 × 2
#    group value
#    <dbl> <chr>
#  1     1 A    
#  2     1 B    
#  3     1 C    
#  4     1 D    
#  5     2 E    
#  6     2 F    
#  7     2 G    
#  8     2 H    
#  9     3 J    
# 10     3 K    
# 11     3 L    
# 12     3 M    
# 13     4 Q    
# 14     4 R    
# 15     4 S    
# 16     4 T    
© www.soinside.com 2019 - 2024. All rights reserved.