Работал с некоторыми грязными данными.У меня 72 файла: 9 (CCLF1-CCLF9) таблиц, разделенных на 8 частей.Каждый файл является файлом фиксированной ширины, и у меня есть словарь с правильной шириной и именами столбцов, которые я извлекаю из таблицы Excel.
Проблема в том, что после загрузки я понял, что существуют файлы с дополнительными 11 символами.Так что это заставляет их связывать неправильно.
То, что я хочу сделать, - это поиск файла, чтобы увидеть, имеет ли он правильное количество символов в строке, и если это так, добавить 11 пробелов в правильном месте.Я добавлю имя столбца "random_11_spaces", затем свяжу их вместе и удалю столбцы "random_11_spaces".
Например, файл CCLF1 должен иметь ширину 177, но 5 его подфайлов имеют ширину 188. Я хочу проверить, равен ли он 177, если да, добавьте 11 символов, в противном случае загрузите файл.
Я просто не знаю, как это сделать.Вот что мне нужно загрузить в данные:
# Pull in the CCLF Details xlsx and put them into a list
details_path <- paste0(mappingPath,"CCLF Dictionary.xlsx")
sheetnames <- excel_sheets(details_path)
CCLF_details <- lapply(sheetnames,read_excel, path = details_path)
names(CCLF_details) <- sheetnames
# Extract the column width and column labels vectors from the xlsx
widths <- unname(sapply(CCLF_details,'[[',"COLUMN_WIDTH", drop = FALSE))
correct_widths <- lapply(widths,sum)
col_labels <- unname(sapply(CCLF_details,'[[',"CLAIM_FIELD_LABEL", drop = FALSE))
# Set up group names for the CCLF Files (CCLF1-CCLF9)
CCLF_files <- paste("CCLF",seq(1:9),sep = "")
proc_files <- function(f, w, y) {
# Get files with Current CCLF# in name
files <- list.files(pattern = f)
# Build a list of data tables from all CCLF# files and pull in the proper widths and column names
df_list <- lapply(files, function(x) read_fwf(x, fwf_widths(widths = w, col_names = y ), na = c("","NA","~","1000-01-01","9999-12-31")))
# Bind all of the CCLF# files into one main file
df <- rbindlist(df_list, fill = TRUE)
}
# Create a list of all the CCLF Files
df_list <- Map(proc_files,CCLF_files,as.vector(widths),as.vector(col_labels))