найдите разницу как в SheetA, так и в SheetB и вставьте ее в другой лист Excel

#r #dplyr #data-science #tidyverse

Вопрос:

Привет, братья и сестры

Приветствую вас всех

Пожалуйста, мне нужна ваша скромная помощь

У меня есть 2 разных листа excel в книге excel

У меня есть некоторые записи в SheetA, но не в SheetB, а также в SheetB, а не в SheetA, используя столбец ID_1 в SheetA против Source_ID в SheetB

см. таблицу ниже

это Шита

Торговец ценность ID_1 сеть
Песчаный 500 2KJH2BH2 98
Однотонные 501 2KJH2BH3 42
манфи 502 2KJH2BH4 43
плирр 503 2KJH2BH5 44
плирр 504 2KJH2BH6 45
манфи 505 2KJH2BH7 46

Это лист Б

Торговец ценность Источник ID
Песчаный 500 2KJH2BH2 98
Однотонные 501 2KJH2BH3 42
манфи 502 efjerbf7 43
плирр 503 кельнклнв 44
плирр 504 2KJH2BH6 45

что я хочу, так это сравнить оба листа A и B, используя ID_1 в таблице, с идентификатором источника в таблице, дайте мне то, что в таблице, чего нет в таблице, используя ID_1, откройте другой отличный лист и вставьте его туда

дайте мне лист, которого нет в листе, используя source_ID, откройте другой лист Excel и вставьте его туда

Я хочу, чтобы все это было в одной книге Excel, вот почему я сказал открыть другой лист, вставьте туда недостающие записи

Комментарии:

1. вы хотите, чтобы это было сделано в R или Excel? ваши теги не соответствуют описанию

2. я хочу, чтобы это было сделано в R, а затем позже экспортируйте конечный результат в excel

3. @user16087142 предложенные ответы не решают вашу задачу?

Ответ №1:

Может быть, если вы используете anti_join() из dplyr, то write.xlsx

 library(readxl)
library(dplyr)

sheetA<-readxl::read_excel('imput_file.xlsx', sheet = 'sheetA')
sheetB<-readxl::read_excel('imput_file.xlsx', sheet = 'sheetB')

sheetA %>% anti_join(sheetB, by=c('ID1' = 'source')) %>% write.xlsx(file="output_file.xlsx", sheetName="sheetA", row.names = F)
sheetB %>% anti_join(sheetA, by=c('source' = 'ID1')) %>% write.xlsx(file="output_file.xlsx", sheetName="sheetB", row.names = F)
 

Ответ №2:

одной из альтернатив для обработки многостраничных файлов Excel является пакет openxlsx:

 library(openxlsx)
# where to read the data from (change acordingly)
path <- ".../MY_EXCEL.xlsx"
# read in data to object, conserving formating etc.
wb <- openxlsx::loadWorkbook(file = path)
# read specific data
df1 <- openxlsx::read.xlsx(wb, sheet = 1)
df2 <- openxlsx::read.xlsx(wb, sheet = 2)
# use the anti_join
df3 <- df1 %>%
    dplyr::anti_join(df2, by = c("ID_1" = "source"))
# create new page in wb object
openxlsx::addWorksheet(wb = wb, sheetName = "sheetC")
# write data
openxlsx::writeData(wb = wb, sheet = "sheetC", x = df3)

# repeating for newt sheet
df4 <- df2 %>%
    dplyr::anti_join(df1, by = c("source" = "ID_1"))

openxlsx::addWorksheet(wb = wb, sheetName = "sheetD")
openxlsx::writeData(wb = wb, sheet = "sheetD", x = df4)

# overwrite existing excel file
openxlsx::saveWorkbook(wb = wb, file = path, overwrite = TRUE)
 

Вы могли бы возобновить это в хорошей функции, чтобы уменьшить количество строк кода…