Я хочу идентифицировать двусторонние комбинации уровней в одном столбце, сгруппированные по переменным 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 выше для решения этой проблемы)