数据如下:
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,并且在它们之前或之后都有零。
我们可以
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