Это немного неловко, поскольку мы просим dplyr
объединяться по позиции, когда кажется, что производные списки больше не соответствуют строкам, к которым мы их присоединяем. Один из способов сделать это - дать rowid
каждой строке исходных данных, каждой строке производных списков и left_join на основе этого rowid
.
library(dplyr)
Class1 <- df %>%
filter(Time == 1 | Time == 3 & Group %in% c("A", "M")) %>%
select(Class1 = income)
Class2 <- df %>%
filter(Time == 2 | Time == 3 & Group %in% c("P", "Q")) %>%
select(Class2 = income)
df %>% rowid_to_column() %>%
left_join(Class1 %>% rowid_to_column(), by = "rowid") %>%
left_join(Class2 %>% rowid_to_column(), by = "rowid")
rowid Group Time income Class1 Class2
1 1 A 1 20 20 11
2 2 M 3 14 14 22
3 3 A 2 11 24 21
4 4 P 2 22 NA 22
5 5 Q 3 21 NA 15
6 6 Q 1 24 NA NA
7 7 M 2 22 NA NA
8 8 P 2 15 NA NA
В R NA
- это специальное значение, которое является заполнителем для данных, которые не имеют явного значения. Это удобно, когда вы хотите контролировать, включены ли отсутствующие данные или исключены из расчетов. Если это последний шаг в обработке и вы хотите вывести читаемую таблицу, вы можете заменить NA на пустой символ "", но это изменит столбцы данных на символьные данные, что будет неудобно для любых дальнейших вычислений.