#r #lapply
#r #lapply
Вопрос:
Относительно новичок во всем этом и был бы признателен за помощь:
Я пытаюсь объединить> 100 файлов xlsx в R. У них в основном похожие столбцы, поэтому позже я использую rbind.заполните, как только они появятся в списке. Однако у меня возникают трудности с объединением списка в один большой фрейм данных из-за проблемы с форматированием даты. Я застрял на следующей ошибке:
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
Вот мой код на данный момент:
# Reading the list of files in my folder
file_list <- list.files(path="data/")
# reading the data into a list
library(readxl)
All <- lapply(file_list,function(filename){
print(paste("Merging",filename,sep = " "))
read_xlsx(filename)
})
# Merge to one dataframe
df <- do.call(rbind.fill, All)
Вот где я получаю ошибку. Я думаю, это потому, что в некоторых файлах столбцы дат имеют разные форматы.
Вопрос: Есть ли способ lapply
функционировать (или что-то в этом роде) так, чтобы все столбцы даты из списка были в одном формате? Я упускаю что-то совершенно очевидное здесь? Я был бы в порядке, если бы был способ преобразовать их в символы, а затем вернуться к дате позже, если это быстрое решение, но я не уверен, как именно это сделать. Спасибо за любую помощь.
Ответ №1:
Если вы знаете все возможные Date
имена столбцов, то вы могли бы сделать что-то подобное, прежде rbind
чем:
dtcols <- c("date", "Somedate", "date123")
All <- lapply(All, function(dat) {
cols <- intersect(dtcols, names(dat))
dat[cols] <- lapply(dat[cols], as.Date)
dat
})
as.Date
является идемпотентным, поэтому его безопасно использовать, если столбец уже относится к классу Date
. Если cols
значение пустое (столбцы не найдены), это по-прежнему безопасно, ничего не делая.
В зависимости от исходных данных может потребоваться указать origin
или format
as.Date
, например
dat[cols] <- lapply(dat[cols], as.Date, format = "%m/%d/%Y")
Комментарии:
1. Спасибо! Я использовал именно этот формат, но в итоге столкнулся с другой проблемой. Затем я изменил только ‘как. Дата’ в вашем примере как.numeric. Это позволило им повторно связать, и я преобразовал дату после слияния.
2. Метод тот же, рад, что вы смогли адаптироваться. Да, единообразное получение временных меток и дат из книг xlsx может быть проблематичным.