R эквивалентно SAS «слияние» «по»

Если вы используете только «слияние» и «по» в SAS для объединения наборов данных, которые содержат несколько переменных с одинаковыми именами (кроме идентификаторов, по которым вы объединяете), SAS объединит эти переменные в одну, используя значение, прочитанное последним — это описано здесь https://communities.sas.com/t5/SAS-Programming/Merge-step-overwriting-shared-vars/m-p/281542#M57117

Текст по ссылке выше:

«Существует правило: какое значение было прочитано последним. Но это правило простое только тогда, когда слияние происходит один к одному. В этом случае получаемое значение зависит от порядка в операторе MERGE:

объединить а б;

по идентификатору;

Значение общих переменных (для взаимного слияния) берется из набора данных B. SAS считывает значение из набора данных A, затем считывает значение из набора данных B. Значение из B считывается последним и перезаписывает значение, считанное из набора данных A.

Если есть несоответствие и идентификатор появляется только в наборе данных A, но не в наборе данных B, значение будет найдено в наборе данных A».

Как заставить R вести себя одинаково без необходимости впоследствии объединять строки после определенных условий? (в SAS значения не перезаписываются NA)

library(tidyverse)
#create tibbles
df1 <- tibble(id = c(1:3), y = c("tt", "ff", "kk"))
df2 <- tibble(id = c(1,2,4), y = c(4,3,8))
df3 <- tibble(id = c(1:3), y = c(5,7,NA)) 
#combine the tibbles
combined_df <- list(df1, df2, df3) %>% 
reduce(full_join, by = "id")
# desired output
combined_df_desired <- tibble(id = 1:4, y = c(5,7,"kk",8))
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
377
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не знаю точно, что вы имеете в виду под "определенными условиями". Невозможно изменить внутреннюю работу full_join(), но вы можете сделать это:

list(df1, df2, df3) %>% 
  reduce(full_join, by = "id") %>%
  mutate_all(as.character) %>%
  mutate(y = coalesce(y, y.y , y.x,)) %>%
  select(id, y)

 A tibble: 4 x 2
  id    y    
  <chr> <chr>
1 1     5    
2 2     7    
3 3     kk   
4 4     8   

coalesce() принимает набор столбцов и возвращает первое не-NA значение для каждой строки. Вы можете упорядочить столбцы внутри функции в соответствии с вашими приоритетами.

Большое спасибо, не знал, что можно использовать объединение () вот так. Я думаю, что здесь была дана попытка, однако она не работает с моими данными. alistaire.rbind.io/blog/coalescing-joins

Nik 22.05.2019 13:36

На моих собственных данных: Ошибка в соединении (x, y, by = by, suffix = suffix, ...): не удалось найти функцию «join» - В данных из этого поста: Ошибка: suffix должен быть вектором символов длина 2, а не tbl_df/tbl/data.frame объект длины 2

Nik 22.05.2019 13:40

Итак, он работает с тестовыми данными, но не с вашими данными? Это странно, потому что ошибка, похоже, связана с функцией соединения

Humpelstielzchen 22.05.2019 13:44

Да, это работает на тестовых данных из alistaire.rbind.io/blog/coalescing-joins. Это немного странно.

Nik 22.05.2019 13:54

Другие вопросы по теме