在数据帧上重复一个向量
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
连接。
我想根据向量向我的数据表中添加一列。但是我的数据表有 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
连接。