将日期 class 设置为多个数据框列,其名称在列表中指定

Setting date class to multiple data frame columns whose names are specified in a list

这看起来应该很容易,但我找不到答案。

我希望只将指定的变量转换为日期 - 实际上(不是这个例子)有很多列要转换为日期 class。我已经在我手动创建的列表中指定了这些列,如下所示。然后我希望能够为这些列设置日期 class。

数据:

library(lubridate)

date1 <- c("19/06/2012", "19/10/2012", "12/08/2012")
var1 <- c("harry", "sally", "dick")
date2 <- c("08/06/2012", "07/11/2012", "19/07/2012")
var2 <- c("london", "paris", "madrid")
date3 <- c("17/07/2012", "18/09/2012", "19/11/2012")

df <- data.frame(date1, var1, date2, var2, date3)

datecols <- list("df$date1", "df$date2", "df$date3")

这是我认为我出错的地方,我创建了一个函数来设置日期:

setdates <- function(a) {
  a <- a %>%
    dmy(a)
}

...但 lapply:

lapply(datecols, setdates)

...for 循环也不行

for (i in datecols) {
  setdates(i)
}

解析错误。

不幸的是,我似乎找不到答案,而且我想我让这个问题变得比需要的更难了。

如果您不介意使用 dplyr,您可以:

library(dplyr)
res <- mutate_at(df, vars(starts_with("date")), dmy)

#        date1  var1      date2   var2      date3
# 1 2012-06-19 harry 2012-06-08 london 2012-07-17
# 2 2012-10-19 sally 2012-11-07  paris 2012-09-18
# 3 2012-08-12  dick 2012-07-19 madrid 2012-11-19

它的作用是:将 dmy 应用到 df 中那些 starts_with "date".

的列