#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)
Вы могли бы возобновить это в хорошей функции, чтобы уменьшить количество строк кода…