更改数据框列表中的日期

时间:2018-04-29 22:18:56

标签: r list lapply lubridate

我有一个数据帧列表,每个数据帧有8个变量。第五个变量是一个日期,我想使用lubridate将它从类字符转换为日期。日期格式为dd-mmm-yy。目前我正在使用

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

})

但是我收到了以下错误。

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

不知道如何转换&#39; x&#39;上课“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 :(得分:2)

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))))

此外,尚不清楚“金额”是否为&#39;是factor等级。如果只是character课程,请删除as.character

使用tidyverse,可以使用map(来自purrr)和mutate(来自dplyr

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