У меня 9 листов в одной рабочей книге Excel (у меня 2 рабочих книги, первая изначально написана, другая рецензирована) Мне нужно сравнить эти листы с той же рецензированной рабочей книгой, в которой мой рецензент внес изменения.
Яиспользуя приведенные ниже коды для чтения всей рабочей книги и передачи в отдельный фрейм данных в виде таблицы в рабочей книге
# for reading sheets from the reviewed file
workbook_new <- lapply(ws_name_new, function(x) read_excel(path = path_new, sheet = x, skip = 2, na = ""))
workbook_new <- lapply(workbook_new, function(x) x[-2,])
sheet_list_new <- workbook_new[sapply(workbook_new, function(x) dim(x)[1]) > 0]
# for reading sheets from the originally created file
workbook_old <- lapply(ws_name_old, function(x) read_excel(path = path_old, sheet = x, skip = 2, na = ""))
workbook_old <- lapply(workbook_old, function(x) x[-2,])
sheet_list_old <- workbook_old[sapply(workbook_old, function(x) dim(x)[1]) > 0]
# Below code I am using for the removing the not required sheets
# for new Workbook
ws_name_new <- excel_sheets(path = path_new)
ws_name_new <- ws_name_new[-grep("*_Cal", ws_name_new)]
ws_name_new <- ws_name_new[-grep("*_cal", ws_name_new)]
ws_name_new <- ws_name_new[-gre`enter code here`p("*Summary", ws_name_new)]
ws_name_new <- ws_name_new[-c(1, 9, 16, 17, 18, 19, 20, 21, 22,23,24,25, 26, 27)]
# For Old file
ws_name_old <- excel_sheets(path = path_old)
ws_name_old <- ws_name_old[-grep("*_Cal", ws_name_old)]
ws_name_old <- ws_name_old[-grep("*_cal", ws_name_old)]
ws_name_old <- ws_name_old[-grep("*Summary", ws_name_old)]
ws_name_old <- ws_name_old[-c(1, 9, 16, 17, 18, 19, 20, 21, 22,23,24,25, 26, 27)]
подход, которым я придерживаюсь, заключается в том, что сначала я импортирую каждыйодин лист из книги Excel и создание двух фреймов данных. df_1_new из проверенного файла и df_1_old из первоначально созданного. Теперь я хочу сравнить df_1_new с df_1_old и получить окончательный файл различий.
Я пробовал функцию compare_df (), но она дает мне две строки в файле различий, одна оригинальная строка, другая строка, которая модифицируется. Мне нужны только те строки, которые были изменены рецензентом.
У меня есть 9 фреймов данных для каждой рабочей книги, итого 18, которые мне нужно сравнить и получить файл различий. рассмотрим данный wxaple
Пример. Предположим, у меня в рамке ниже двух данных. df_1 - это то, что я создал, а DF_2 - мой исправленный рецензент. Теперь, когда файл очень большой, и у меня более 100 столбцов, я не могу проверить их по одному. Я ищу решение, можно ли сравнить как фрейм данных, так и окончательный результат, который я получу, - это столбцы и строки, в которые были внесены изменения
key <- c(A1, B1, C1, D1)
a <- c(10,20,30,40)
b <- c('book', 'pen', 'textbook', 'pencil_case')
c <- c(TRUE,FALSE,TRUE,FALSE)
d <- c(2.5, 8, 10, 7)
df_1_New <- data.frame(key,a,b,c,d)
key <- c(A1, B1, C1, D1)
a <- c(10,5,40,40)
b <- c('book', 'pen', 'textbook', 'pen_case')
c <- c(TRUE,FALSE,TRUE,TRUE)
d <- c(2.5, 3, 10, 7)
df_1_Old <- data.frame(key, a,b,c,d)
ctable <- compare_df(df_1_New, df_1_Old, c("Key"), keep_unchanged_cols = FALSE)
DF_1_Diff <- ctable$comparison_df
DF_Diff<- DF_1_Diff %>% filter(chng_type == '+') %>% select(-chng_type)
Я хочу отфильтровать только изменения, поэтому яЯ применяю приведенный выше код и также отбрасываю столбец cnge_type. Я также хотел отбросить последние, скажем, 10 строк из df. Я могу сделать это с использованием dplyr в том же, чтобы я мог сделать мой код более эффективным.
ПРИМЕЧАНИЕ: я должен выполнить ту же задачу, что и другие 8 такжеимя фрейма данных выглядит следующим образом: df_2_new, df_2_old, df_2_new, df_3_old и т. д. и т. д.