在数据帧上重复一个向量

Repeat a vector on a dataframe

我想根据向量向我的数据表中添加一列。但是我的数据表有 20 行,而我的向量有 7 个值。我希望数据表重复 7 次,这样每 20 行都有一个来自向量的值。这可能很简单,但我不知道该怎么做。

一些样本数据-

library(data.table)
set.seed(9901)

#### create the sample variables for creating the data
group <- c(1:7)

brn <- sample(1:10,20,replace = T)
period <- c(101:120)

df1 <- data.table(cbind(brn,period))

所以在这种情况下我想添加一个列组。数据表现在有 140 行。第 1 组 20 行,然后第 2 组 20 行,依此类推.....

我会 (1) 重复 group 中的每个数字 20 次以在列表中创建数据集,并且 (2) 加入他们:

AllLists<-apply(as.data.frame(group),1,function(x) cbind(x,df1))
do.call( "rbind",AllLists)

data.table 的解决方案。这就是您要找的吗?

library(data.table)
df2 <- df1[rep(1:nrow(df1), times = 7),
           ][,group := rep(group, each = 20)]

但评论中的 Rolands 解决方案肯定更优雅。

显然你想要这个:

df1[CJ(group, period), on = .(period)]
#     brn period group
#  1:   3    101     1
#  2:   9    102     1
#  3:   9    103     1
#  4:   5    104     1
#  5:   5    105     1
# ---                 
#136:   9    116     7
#137:   7    117     7
#138:  10    118     7
#139:   2    119     7
#140:   7    120     7

CJ 通过传递给它的向量的笛卡尔连接创建一个 data.table。 data.table 然后根据 on 指定的列与 df1 连接。