Чтение в списке файлов .csv, а затем связывание их вместе без удаления столбцов - PullRequest
0 голосов
/ 04 октября 2019

Я хотел бы создать один кадр данных из нескольких файлов .csv без потери каких-либо столбцов (т. Е. Для любого файла .csv, у которого нет определенного столбца, это пространство будет заполнено NA. Мне бы хотелосьпроцесс выравнивания их по имени столбца, но порядок столбцов в .csv также не всегда совпадает.

Я создал список файлов .csv из папки, в которой есть только указанные файлы

files <- dir("C:/...")

Я хотел бы прочитать в этих файлах .csv в одном кадре данных. То, что я получил до сих пор ...

table_all <- do.call(rbind.fill(ldply(files, read.csv, 
stringsAsFactors= TRUE, header= T, sep= ",")))

Я предполагаю, что решение включает в себя do.call и некоторую комбинацию rbind, bind_rows или rbind.fill. Я читал немного о том, что rbindlist вычислительно легче, но он совпадает только по положению, и поскольку мои .csv имеют столбцы не по порядку,Мне нужно что-то, чтобы соответствовать по имени.

1 Ответ

0 голосов
/ 04 октября 2019

Общий способ решения этой проблемы потребует нескольких шагов. См. Псевдокод ниже (пока мы не получим более точную информацию о вашем конкретном примере):

# step 1 -- list files and prepare columns
file_list <- list.files(path="your_path",
                        pattern="your_pattern",
                        full.names=TRUE)
all_columns <- c("list", "your", "columns", "here")
# ideally all_columns will come from names(df)
# with df being your most complete df
# step 2 -- read and match columns before binding
li <- purrr::map(file_list,
function(file){
df <- read.csv(file)

current_names <- names(df)

# find what names are missing
# do mutate(missing_names = NA)

return(df)
}
)
# step 3 -- bind
output <- bind_rows(li)
...