重塑dataframe,使中的每个列条目在所有其他列上重复

重塑dataframe,使中的每个列条目在所有其他列上重复,r,tidyverse,tidyr,reshape2,R,Tidyverse,Tidyr,Reshape2,我有一个data.frame,dat,看起来像这样 dat=data.frame(x=c(1,1.1,1.2,1.3),y=c(2,2.1,2.2,2.3),输出=c(2,101100)) xy输出 1 1.0 2.0 2 2 1.1 2.1 10 3 1.2 2.2 101 4 1.3 2.3 100 我希望列“x”和“output”的每一对元素都在列“y”上重复 我尝试过使用tidyr::spread、tidyr::collect和restrape2::me

我有一个data.frame,dat,看起来像这样

dat=data.frame(x=c(1,1.1,1.2,1.3),y=c(2,2.1,2.2,2.3),输出=c(2,101100))
xy输出
1 1.0 2.0      2
2 1.1 2.1     10
3 1.2 2.2    101
4 1.3 2.3    100
我希望列“x”和“output”的每一对元素都在列“y”上重复

我尝试过使用
tidyr::spread
tidyr::collect
restrape2::melt
,但都没有效果。这是因为我是使用
tidyr
reformae2
以及其他重塑软件包的初学者

目前,我已经求助于使用循环从列“x”和“output”中提取每个元素对,并创建一个新的data.frame,
final_df
,它组合产生的data.frames。我相信这绝对不是最有效的方法,而且我相信有一个线性函数可以为我带来奇迹

在生成的data.frame中,如果我使用say将data.frame子集

dplyr::filter(final_df, x == 1, output == 2)
应该是这样的:

data.frame(x=rep(1,dat$x[1],nrow(dat)),y=dat$y,output=rep(dat$output[1],nrow(dat)))
xy输出
1 1 2.0      2
2 1 2.1      2
3 1 2.2      2
4 1 2.3      2
我很乐意用tidyverse回答。谢谢。

这里有一个选项

library(dplyr)
library(tidyr)
dat %>% mutate(y1=paste(y,collapse = ',')) %>% separate_rows(y1)
如果x和输出中没有重复,即我们可以将它们视为ID列,那么我们可以使用
tidyr::complete

dat %>% complete(nesting(x,output),y)
一个解决方案:

require(dplyr)
需要(三年)
dat%%>%选择(-y)%%>%交叉(dat%%>%选择(y))
x输出y
1  1.0      2 2.0
2  1.0      2 2.1
3  1.0      2 2.2
4  1.0      2 2.3
5  1.1     10 2.0
6  1.1     10 2.1
7  1.1     10 2.2
8  1.1     10 2.3
9  1.2    101 2.0
10 1.2    101 2.1
11 1.2    101 2.2
12 1.2    101 2.3
13 1.3    100 2.0
14 1.3    100 2.1
15 1.3    100 2.2
16 1.3    100 2.3

请您对此部分进行解释:
列“x”和“output”的每对元素都在列“y”上重复。
?你想让一对重复多少次?我想保持y固定,并重复每个x和输出对以匹配y的长度,如果这有意义的话。