Я искал аналогичный (но немного другой) раствор. Проводка здесь, если это полезно кому-либо еще.
В моем случае мне понадобилось более общее решение, которое позволяет каждую букву повторяться произвольным числом раз. Вот что я придумал:
library(tidyverse)
df <- data.frame(letters = letters[1:4])
df
> df
letters
1 a
2 b
3 c
4 d
Скажем, я хочу 2 A, в 3 Б, 2 C-х и 4 D's:
df %>%
mutate(count = c(2, 3, 2, 4)) %>%
group_by(letters) %>%
expand(count = seq(1:count))
# A tibble: 11 x 2
# Groups: letters [4]
letters count
<fctr> <int>
1 a 1
2 a 2
3 b 1
4 b 2
5 b 3
6 c 1
7 c 2
8 d 1
9 d 2
10 d 3
11 d 4
Если вы не хотите, чтобы столбец подсчета:
df %>%
mutate(count = c(2, 3, 2, 4)) %>%
group_by(letters) %>%
expand(count = seq(1:count)) %>%
select(letters)
# A tibble: 11 x 1
# Groups: letters [4]
letters
<fctr>
1 a
2 a
3 b
4 b
5 b
6 c
7 c
8 d
9 d
10 d
11 d
Если вы хотите, чтобы счетчик, чтобы отразить число раз повторяется каждая буква:
df %>%
mutate(count = c(2, 3, 2, 4)) %>%
group_by(letters) %>%
expand(count = seq(1:count)) %>%
mutate(count = max(count))
# A tibble: 11 x 2
# Groups: letters [4]
letters count
<fctr> <dbl>
1 a 2
2 a 2
3 b 3
4 b 3
5 b 3
6 c 2
7 c 2
8 d 4
9 d 4
10 d 4
11 d 4
Единственный способ, которым я могу думать, - это подключиться к блоку 'do', и из текущего data.frame создать новый, как вы хотите здесь (' df%>% do (data.frame (column = rep (. $ column, 4))) '). Это чревато опасностью, хотя, если data.frame имеет любые другие столбцы. – r2evans
@ r2evans отлично работает. Вы можете отправить его в качестве ответа. просто нужно изменить 'do (data.frame (a = rep (. $ a, each = 4))). – Alexander