【发布时间】:2021-01-16 00:31:38
【问题描述】:
我想确定由id 和Date 变量分组的一列中级别的双向组合。基本上,我想要每个人每天唯一的字母对。
我有一个如下所示的数据框:
in_df <- data.frame(id = c(1,1,1,1,1,2,2,3),
Date = as.Date(c("2019-01-01", "2019-01-01", "2019-01-01", "2019-01-02", "2019-01-02", "2019-01-01", "2019-01-01", "2019-01-01")),
letter = c("A", "B", "C", "A", "B", "A", "D", "B"))
in_df
id Date letter
1 1 2019-01-01 A
2 1 2019-01-01 B
3 1 2019-01-01 C
4 1 2019-01-02 A
5 1 2019-01-02 B
6 2 2019-01-01 A
7 2 2019-01-01 D
8 3 2019-01-01 B
我想要一个看起来像这样的:
out_df
id Date letter_1 letter_2
1 1 2019-01-01 A B
2 1 2019-01-01 A C
3 1 2019-01-01 B C
4 1 2019-01-02 A B
5 2 2019-01-01 A D
6 3 2019-01-01 B NA
所以第一个 id 和第一个 Date 有字母 A、B 和 C。我想要这三个中的每一对。顺序无关紧要,所以切换到 letter_1 和 letter_2 将是一回事。
我玩过expand.grid 和combn,但似乎都不太适合这项任务。
编辑
我也有每个id/Date 只有一行的情况,所以使用combn 给我Error in combn(letter, m = 2) : n < m。如何添加 if 案例以使 letter_2 获得 NA? (我还更新了上面的 dfs 来解决这个问题)
【问题讨论】:
-
您能否详细说明输出中的第二行和第三行是如何创建的?我的意思是
letter_1和letter_2中的值。 -
@tmfmnk 感谢您的快速回复!我试着澄清一下,这有帮助吗?
标签: r