После группировки по 'ID' мы можем получить элемент first
для 'Group', 'Day', 'Location' и вернуть второй элемент 'Match'
library(dplyr)
df1 %>%
group_by(ID) %>%
summarise(Group = first(Group), Day = first(Day),
Location = first(Location),
Match = Period[2], Period = first(Period))
# A tibble: 4 x 6
# ID Group Day Location Match Period
# <int> <fct> <fct> <fct> <fct> <fct>
#1 231 A am D N2 N1
#2 234 B pm K <NA> N2
#3 241 A am A M2 M1
#4 300 A am K <NA> M2
Или другой вариант - mutate
столбцы со значением first
после группировки по идентификатору, а затем выполнить summarise
df1 %>%
group_by(ID) %>%
mutate_at(vars(Group, Day, Location), first) %>%
group_by(Group, Day, Location , .add= TRUE) %>%
summarise(Match = Period[2], Period = first(Period))
# A tibble: 4 x 6
# Groups: ID, Group, Day [4]
# ID Group Day Location Match Period
# <int> <fct> <fct> <fct> <fct> <fct>
#1 231 A am D N2 N1
#2 234 B pm K <NA> N2
#3 241 A am A M2 M1
#4 300 A am K <NA> M2
В версии devel
dplyr
, это можно сделать более компактным с помощью across
df1 %>%
group_by(ID) %>%
summarise(across(c(Group, Day, Location), first),
Match = Period[2], Period = first(Period))
# A tibble: 4 x 6
# ID Group Day Location Match Period
# <int> <fct> <fct> <fct> <fct> <fct>
#1 231 A am D N2 N1
#2 234 B pm K <NA> N2
#3 241 A am A M2 M1
#4 300 A am K <NA> M2
Здесь мы предполагаем, что на уникальный идентификатор будет не более 2 строк