在没有公共变量的情况下执行dplyr full_join以混合数据帧

时间:2017-06-29 19:56:26

标签: r dplyr

使用dplyr full_join()操作,我试图执行基本merge()操作的等效操作,其中不存在公共变量(无法满足" by ="参数)。这将混合两个数据帧并返回所有可能的组合。

但是,当前full_join()函数需要一个公共变量。我无法找到另一个可以帮助解决此问题的dplyr函数。 如何使用特定于dplyr库的函数执行此操作?

df_a = data.frame(department=c(1,2,3,4))
df_b = data.frame(period=c(2014,2015,2016,2017))

#This works as desired
big_df = merge(df_a,df_b)

#I'd like to perform the following in a much bigger operation:
big_df = dplyr::full_join(df_a,df_b)

#Error: No common variables. Please specify `by` param.

1 个答案:

答案 0 :(得分:24)

您可以使用crossing中的tidyr

crossing(df_a,df_b)

   department period
1           1   2014
2           1   2015
3           1   2016
4           1   2017
5           2   2014
6           2   2015
7           2   2016
8           2   2017
9           3   2014
10          3   2015
11          3   2016
12          3   2017
13          4   2014
14          4   2015
15          4   2016
16          4   2017