我在一个单独的excel工作簿中有9个工作表(有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)
注意:我还必须执行其他8项相同的任务,并且数据帧的名称紧随df_2_new,df_2_old,df_2_new,df_3_old等,依此类推。
任何人都可以建议我或指导我有效的方法。