Как продублировать каждую строку на основе нового столбца? - PullRequest
2 голосов
/ 05 ноября 2019

Я не совсем уверен, как задать вопрос, так как английский не мой родной язык. Я хочу дублировать каждую уникальную id строку 13 раз и создать новый столбец, содержащий строки со значением в диапазоне от -8 to 4, чтобы заполнить эти 13 ранее дублированных строк. Я думаю, что мои выборочные данные и ожидаемые данные предоставят лучшее объяснение.

выборочные данные:

data <- data.frame(id = seq(1,100,1),
                   letters = sample(c("A", "B", "C", "D"), replace = TRUE))

> head(data)
    id letters
1    1    A
2    2    B
3    3    B
4    4    C
5    5    A
6    6    B

ожидаемые данные:

   newcol id letters
1      -8  1       A
2      -7  1       A
3      -6  1       A
4      -5  1       A
5      -4  1       A
6      -3  1       A
7      -2  1       A
8      -1  1       A
9       0  1       A
10      1  1       A
11      2  1       A
12      3  1       A
13      4  1       A
14     -8  2       B
15     -7  2       B
16     -6  2       B
17     -5  2       B

Так что я думаю, что смогускажем, что я хочу создать новый столбец с значениями в диапазоне от -8 до 4 (т.е. 13 различных значений) для каждой уникальной строки в столбце id. Также, если возможно, я хотел бы знать, как это сделать в базе R с пакетом data.table.

Спасибо и извините за мою плохую грамматику.

1 Ответ

3 голосов
/ 05 ноября 2019

Мы можем использовать uncount

library(tidyr)
library(dplyr)
data %>%
  uncount(13) %>%
  group_by(id) %>%
  mutate(newcol = -8:4) %>%
  ungroup

Или в base R

data1 <- data[rep(seq_len(nrow(data)), each = 13),]
data1$newcol <- -8:4

Или используя data.table

library(data.table)
setDT(data)[rep(seq_len(.N), each = 13)][, newcol := rep(-8:4, length.out = .N)][]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...