Я пытаюсь обработать некоторые данные в таблице (фрейме данных), используя dplyr, для дублирования записей, где, если идентификатор появляется дважды, результирующая запись будет содержать одинаковые значения, если все они идентичны, или NA, если есть несоответствие в одной из записей. Например, если у меня есть df:
id date amount tag
--- ---- ------ ---
1 2018-01-03 10 big
2 2019-01-16 20 small
3 2020-01-05 30 big
3 2001-03-04 30 big
1 2018-01-03 5 big
Результат должен выглядеть следующим образом:
id date amount tag
--- ---- ------ ---
1 2018-01-03 NA big
2 2019-01-16 20 small
3 NA 30 big
Основываясь на других ответах, которые я нашел о переполнении стека, я пробовал различные методы использования summarise_all, включая:
new_df <- df %>% group_by(id) %>% summarise_all(function(x) ifelse(all(x[1] == x),x[1],NA))
new_df <- df %>% group_by(id) %>% summarise_all(list(~ if(all(.[1] == .)) .[1] else NA))
new_df <- df %>% group_by(id) %>% summarise_all(funs(if(all(.[1] == .)) .[1] else NA))
Поскольку я мог использовать ifelse(all(x[1] == x),x[1],NA)
сам по себе с вектором, и он работал нормально, я подумал, что это будет работать с summarise_all. Но когда я использую это с summarise_all
или другими вариантами, которые я показываю выше, я получаю ошибку:
Error in summarise_impl(.data, dots): Column `date` can't promote group 2 to character
Я подозреваю, что мне просто нужно немного изменить свой код, чтобы он заработал, но я работал над этим весь день, и я не знаю, почему он не работает ... Так что любой помощь, которую может оказать сообщество, будет принята с благодарностью. Я впервые задаю вопрос о переполнении стека, потому что почти всегда могу найти ответ на вопросы других людей :-) Большое спасибо за любую помощь!