如何基于新列复制每一行?

时间:2019-11-05 17:38:24

标签: r

由于英语不是我的母语,所以我不确定如何问这个问题。我想要的是将每个唯一的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

所以我想我可以说我想为id列中的每个唯一行创建一个新列,其值介于-8到4之间(所以13个不同的值)。 另外,如果可能的话,我想知道如何在base R中使用data.table软件包。

谢谢你,我的语法不好。

1 个答案:

答案 0 :(得分:3)

我们可以使用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)][]