Можно создать условие с помощью if/else
для возврата NA, когда все значения в столбце равны NA
или else
, чтобы получить unique
не-NA элементов в list
library(dplyr)
a %>%
group_by(ID) %>%
summarise_all(list(~ list(if(all(is.na(.))) NA else unique(.[!is.na(.)]))))
# A tibble: 2 x 7
# ID Value1 Value2 Value3 Value4 Value5 Value6
# <int> <list> <list> <list> <list> <list> <list>
#1 1076 <int [1]> <int [1]> <chr [1]> <int [1]> <int [1]> <int [1]>
#2 1109 <int [1]> <lgl [1]> <chr [1]> <int [1]> <int [1]> <int [1]>
РЕДАКТИРОВАТЬ:
1) Завернуто в list
2) @ комментарий Грегора - получить только unique
не-NA элементы
данные
a <- structure(list(ID = c(1076L, 1076L, 1109L, 1109L), Value1 = c(2940L,
2940L, 2940L, 2940L), Value2 = c(NA, 1L, NA, NA), Value3 = c(NA,
"A-", NA, "A-"), Value4 = c(2L, NA, 3L, NA), Value5 = c(NA, 302L,
NA, 700L), Value6 = c(NA, 549L, NA, 150L)), class = "data.frame", row.names = c(NA,
-4L))