Изменить даты в списке данных - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть список данных с 8 переменными в каждом из 6 данных. Пятая переменная - это дата, и я хотел бы преобразовать ее из символа класса в Date, используя lubridate. Дата в форме дд-ммм-гг. В настоящее время я использую

firstOfMonth <- lapply(fileList,function(x) { x[5] <-
as.Date(strftime(x, format="%d-%b-y"))

})

но я получаю следующую ошибку.

Error in as.POSIXlt.default(x, tz = tz) : 

не знаю, как преобразовать 'x' в класс “POSIXlt”

Кроме того, я хотел бы изменить класс 8-го столбца на числовой. Следующее не было успешным.

lapply(listDF, function(df) mutate_at(df, vars(matches("^Amount")), as.numeric))

Name    Address City    District    Date    Visit   Completed   Amount
Baxter  1211 South Ave  Akron   A   4-Mar-22    Y   Y   12.02
Christ  105 Main Str    Akron   B   4-Mar-22    Y   N   0
Matthews    152 5th Str Akron   A   4-Mar-22    N   N   0
James   45 River Rd Akron   C   4-Mar-22    Y   Y   24.25
Lewis   92 Washington Str   Akron   D   4-Mar-22    Y   Y   16.5

1 Ответ

0 голосов
/ 30 апреля 2018

Формат as.Date должен быть

as.Date(x, format="%d-%b-%y") #note the `y` in the OP's code

В дополнение к этому существует только присвоение 5-го столбца столбцу Date, но он не возвращает x, то есть data.frame

lapply(fileList,function(x) { 
      x[,5] <- as.Date(x[,5], format="%d-%b-%y");
   x})

Это можно сделать проще с transform (где мы меняем несколько столбцов)

lapply(fileList, transform, Date = as.Date(Date, format = "%d-%b-%y"),
       Amount = as.numeric(as.character(Amount))))

Кроме того, неясно, является ли 'Amount' классом factor или нет. Если это просто character класс, удалите as.character


С tidyverse это можно сделать, используя map (от purrr) и mutate (от dplyr)

library(tidyverse)
map(fileList, ~ .x %>%
                  mutate(Date = dmy(Date),
                         Amount = as.numeric(as.character(Amount))))
...