由于英语不是我的母语,所以我不确定如何问这个问题。我想要的是将每个唯一的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软件包。
谢谢你,我的语法不好。
答案 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)][]