Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r创建多个记录的数据操作_R_Merge_Dataframe_Data Manipulation - Fatal编程技术网

r创建多个记录的数据操作

r创建多个记录的数据操作,r,merge,dataframe,data-manipulation,R,Merge,Dataframe,Data Manipulation,我有两个数据帧,如下所示 v1 v2 a 0.3 b 0.5 c 0.6 d 0.5 及 我希望数据帧如下所示 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

我有两个数据帧,如下所示

v1  v2
a   0.3
b   0.5
c   0.6
d   0.5

我希望数据帧如下所示

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

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

我们可以将
df
每行复制4次,从而
cbind
使用
df2$v3
x4进行复制

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

我们可以将
df
的每一行复制4次,然后用
df2$v3
x4复制
cbind

cbind(df[rep(1:nrow(df), each = 4), ], v3 = rep(df2$v3, 4)) 
合并将起作用

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
合并将起作用

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

这里是另一个带有
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

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

这里是另一个使用
CJ
的选项,来自
数据。表

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

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

您好,欢迎使用StackOverflow。你能分享你自己尝试过的吗?我们不应该为您编写代码。您好,欢迎来到StackOverflow。你能分享你自己尝试过的吗?我们不应该为您编写代码。很好的解决方案
merge(df1,df2)
给出了相同的结果,尽管没有排序。Yes@pierrelaffortune,因为排序,我指定了列名!!很好的解决方案
merge(df1,df2)
给出了相同的结果,尽管没有排序。Yes@pierrelaffortune,因为排序,我指定了列名!!