После группировки по 'id', 'analysis', if
все элементы NA
return NA
или else
возвращают первый не-NA элемент. Для «меры» неясно, почему возвращается NA
, поэтому столбец изменяется на NA
library(dplyr)
df1 %>%
mutate(measure = NA) %>%
group_by(id, assessment) %>%
summarise_at(vars(-group_cols()), ~ if(all(is.na(.))) NA else .[!is.na(.)][1])
# A tibble: 3 x 6
# Groups: id [2]
# id assessment measure data EDE_data HWM_data
# <int> <chr> <lgl> <int> <int> <int>
#1 4001 A1 NA 1 1 1
#2 4001 A2 NA 2 2 NA
#3 4002 A1 NA 3 3 3
Или если нам не нужен столбец «мера» select
out
df %>%
select(-measure) %>%
group_by(id, assessment) %>%
summarise_at(vars(-group_cols()), ~ if(all(is.na(.))) NA else .[!is.na(.)][1])
данные
df1 <- structure(list(id = c(4001L, 4001L, 4001L, 4001L, 4001L, 4002L,
4002L, 4002L), assessment = c("A1", "A1", "A1", "A2", "A2", "A1",
"A1", "A1"), measure = c(NA, "EDE", "HWM", NA, "EDE", NA, "EDE",
"HWM"), data = c(1L, NA, NA, 2L, NA, 3L, NA, NA), EDE_data = c(NA,
1L, NA, NA, 2L, NA, 3L, NA), HWM_data = c(NA, NA, 1L, NA, NA,
NA, NA, 3L)), class = "data.frame", row.names = c("1", "2", "3",
"4", "5", "6", "7", "8"))