Как сравнить фрейм данных в R / Rstudio - PullRequest
0 голосов
/ 23 октября 2019

У меня 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 и т. д. и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...