我有两个数据框如下。
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
有人能告诉我怎么做吗?创建此数据框的原因是为逻辑回归输出创建多个场景。
答案 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
注意:它是动态的,因为它随着每个数据集中的行数而变化。