【发布时间】:2020-06-09 21:36:02
【问题描述】:
我在执行连接操作时遇到问题。
我的两个数据框是:
library(tidiverse)
df_one <- data.frame(
cohort = c("2019-03-01", "2019-03-01", "2019-03-01", "2019-04-01",
"2019-04-01", "2019-05-01"),
periods = c(1, 2, 3, 1, 2, 1),
value = c(13, 24, 35, 22, 38, 21)
)
df_two <- data.frame(
periods = c(1, 2, 3, 4),
value_2 = c(100, 73, 45, 29)
)
我想要实现的最终结果是一个连接的数据框,其中包含df_two 中的所有可能组合 - 对df_one 中的元素重复 - 如下:
df_final <- data.frame(
cohort = c("2019-03-01", "2019-03-01", "2019-03-01", "2019-03-01",
"2019-04-01", "2019-04-01", "2019-04-01",
"2019-04-01", "2019-05-01", "2019-05-01", "2019-05-01",
"2019-05-01"),
periods = c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4),
value = c(13, 24, 35, NA, 22, 38, NA, NA, 21, NA, NA, NA),
value_2 = c(100, 73, 45, 29, 100, 73, 45, 29, 100, 73, 45, 29)
)
cohort periods value value_2
1 2019-03-01 1 13 100
2 2019-03-01 2 24 73
3 2019-03-01 3 35 45
4 2019-03-01 4 NA 29
5 2019-04-01 1 22 100
6 2019-04-01 2 38 73
7 2019-04-01 3 NA 45
8 2019-04-01 4 NA 29
9 2019-05-01 1 21 100
10 2019-05-01 2 NA 73
11 2019-05-01 3 NA 45
12 2019-05-01 4 NA 29
我尝试使用crossing():
crossing(df_one, df_two)
但我得到了错误:
Error: Column name `periods` must not be duplicated.
Run `rlang::last_error()` to see where the error occurred.
一旦修复了唯一列名 - 正如用户 @akrun 所建议的那样 - 通过:
crossing(df_one, df_two, .name_repair = "unique")
我意识到crossing() 不会产生我想要的结果。
我应该遵循什么方法来获得df_final?
【问题讨论】:
-
我不是故意让任何人看起来像傻瓜。我的问题是如何从两个初始数据帧
df_one和df_two开始获得输出df_final。我试图用crossing()来解决它——错误地——我寻求帮助,绝对无意冒犯任何人@akrun -
我再次编辑了这个问题 - 指定您对
crossing()抛出的错误的更正,我希望现在它可以更好地澄清我的要求@akrun