Как добавить строки на основе группы, в то же время добавляя одну? - PullRequest
1 голос
/ 11 марта 2020

У кого-нибудь есть способ добавлять строки по группам определенной длины без необходимости создания новых фреймов данных? Это мой текущий фрейм данных со столбцами «Группа» и «Количество»

Group   Amount
 Dog      1
 Dog      2
 Dog      3
 Cat      3
 Cat      4
 Rat      7
 Rat      8
 Rat      9
 Rat      10

Я пытаясь сделать их равными по длине, чтобы они могли выглядеть так, как показано ниже:

Group   Amount
 Dog      1
 Dog      2
 Dog      3
 Dog      4
 Dog      5
 Dog      6
 Dog      7
 Cat      3
 Cat      4
 Cat      5
 Cat      6
 Cat      7
 Cat      8
 Cat      9
 Rat      7
 Rat      8
 Rat      9
 Rat      10
 Rat      11
 Rat      12
 Rat      13

Где я хочу, чтобы каждая группа имела длину семь, и просто добавляю одну в конец группы, пока они не достигнут желаемой длина.

Спасибо

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

Мы можем сгруппировать по «Группе», а затем использовать complete для расширения строк

library(dplyr)
library(tidyr)
n <- 7
df1 %>% 
     group_by(Group) %>%
     complete(Amount = min(Amount):(min(Amount) + (n -1))) %>%
     as.data.frame

data

df1 <- structure(list(Group = c("Dog", "Dog", "Dog", "Cat", "Cat", "Rat", 
"Rat", "Rat", "Rat"), Amount = c(1L, 2L, 3L, 3L, 4L, 7L, 8L, 
9L, 10L)), class = "data.frame", row.names = c(NA, -9L))
1 голос
/ 11 марта 2020

In data.table:

library(data.table)

setDT(df)[, .(Amount = seq(min(Amount), min(Amount) + 6)), by = Group]

Выход:

    Group Amount
 1:   Dog      1
 2:   Dog      2
 3:   Dog      3
 4:   Dog      4
 5:   Dog      5
 6:   Dog      6
 7:   Dog      7
 8:   Cat      3
 9:   Cat      4
10:   Cat      5
11:   Cat      6
12:   Cat      7
13:   Cat      8
14:   Cat      9
15:   Rat      7
16:   Rat      8
17:   Rat      9
18:   Rat     10
19:   Rat     11
20:   Rat     12
21:   Rat     13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...