r数据操作创建多个记录

时间:2016-02-03 13:52:39

标签: r merge dataframe data-manipulation

我有两个数据框如下。

v1  v2
a   0.3
b   0.5
c   0.6
d   0.5

v3
aa
ab
ac
ad

我希望数据帧如下。

v1  v2  v3
a   0.3 aa
a   0.3 ab
a   0.3 ac
a   0.3 ad
b   0.5 aa
b   0.5 ab
b   0.5 ac
b   0.5 ad
c   0.6 aa
c   0.6 ab
c   0.6 ac
c   0.6 ad
d   0.5 aa
d   0.5 ab
d   0.5 ac
d   0.5 ad

有人能告诉我怎么做吗?创建此数据框的原因是为逻辑回归输出创建多个场景。

3 个答案:

答案 0 :(得分:3)

我们可以复制{strong>每行行df 4次,然后cbind复制df2$v3 x 4。

cbind(df[rep(1:nrow(df), each = 4), ], v3 = rep(df2$v3, 4)) 

答案 1 :(得分:2)

合并将有效!!

merge(df2, df1)[,c("v1", "v2", "v3")]

# v1  v2 v3
# 1   a 0.3 aa
# 2   a 0.3 ab
# 3   a 0.3 ac
# 4   a 0.3 ad
# 5   b 0.5 aa
# 6   b 0.5 ab
# 7   b 0.5 ac
# 8   b 0.5 ad
# 9   c 0.6 aa
# 10  c 0.6 ab
# 11  c 0.6 ac
# 12  c 0.6 ad
# 13  d 0.5 aa
# 14  d 0.5 ab
# 15  d 0.5 ac
# 16  d 0.5 ad

答案 2 :(得分:0)

以下是来自CJ

data.table的另一个选项
library(data.table)
CJ(1:nrow(df1), 1:nrow(df2))[,c(df1[V1,],list(v3=df2[V2,]))]
#    v1  v2 v3
# 1:  a 0.3 aa
# 2:  a 0.3 ab
# 3:  a 0.3 ac
# 4:  a 0.3 ad
# 5:  b 0.5 aa
# 6:  b 0.5 ab
# 7:  b 0.5 ac
# 8:  b 0.5 ad
# 9:  c 0.6 aa
#10:  c 0.6 ab
#11:  c 0.6 ac
#12:  c 0.6 ad
#13:  d 0.5 aa
#14:  d 0.5 ab
#15:  d 0.5 ac
#16:  d 0.5 ad

注意:它是动态的,因为它随着每个数据集中的行数而变化。