将日期类设置为名称在列表

时间:2017-11-03 16:23:08

标签: r lubridate

这似乎应该很容易,但我无法找到答案。

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

数据:

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(datecols, setdates)

...也不是for循环工作

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

我得到解析错误。

不幸的是,我似乎无法找到答案,而且我认为我会让它变得比实际需要的更难。

1 个答案:

答案 0 :(得分:2)

如果您不介意使用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"的那些列。